我需要每天使用 cron 作业删除特定文件夹中的所有文件。我当前的 crontab 条目如下所示:
0 22 * * * /bin/rm -rf /var/www/abcd/app/管理/应用程序/会话/*
但是,这并不总是有效,尤其是当文件夹中有大量文件时。有时我会收到错误,因为我使用此 crontab 将错误重定向到文件中:
0 22 * * * rm -rf /var/www/abcd/app/Management/application/session/* >> /home/ubuntu/errorgetter.log 2>&1
这是错误:
/bin/sh: 1: /bin/rm: 参数列表太长
注意:我以root用户创建了crontab -e,因此不存在删除它的权限问题。
现在我该怎么做?
我能够在 cron 作业中使用 find 命令解决这个问题。这是对我有用的更新后的 crontab 条目:
0 22 * * * find /var/www/abcd/app/Management/application/session/ -type f -delete
为什么有效:
find:单独处理文件,避免使用 rm 处理太多文件时出现的“参数列表太长”错误。
-type f:确保仅删除文件(而不是目录)。
-delete:直接删除每个文件,而不扩展成很长的参数列表。
现在,它将在每天晚上 10 点自动运行,以删除指定文件夹中的所有文件。
注: 确保运行 cron 作业的用户具有删除指定目录中文件的必要权限。您可以通过以同一用户身份手动运行该命令来验证这一点。如果出现权限问题,您可能需要使用 chmod 或 chown 调整所有权或文件权限。
如果以 root 用户身份运行 crontab -e,则 cron 作业将由 root 用户执行。 如果您以普通用户(例如 ubuntu 或 www-data 等用户)身份运行 crontab -e,则 cron 作业将由该特定用户执行。
查看特定用户的cronjob:
sudo crontab -u <username> -l