我的服务器上有 3 个用户,其中 2 个用于 FTP 上传。
我希望 CRON 每隔一段时间触发一项作业,删除各自主目录中名为“subdomain”的文件夹中已存在 X 天或更早的文件。
当以拥有目录的用户身份在终端中运行时,此命令有效;
find /home/derakupload/subdomain -mindepth 1 -mmin +1 -delete
问题出在 CRON 上,它拒绝运行此命令。
我使用进入 CRON sudo crontab -e
,目前有 2 个条目;
* * * * * derakupload find '/home/derakupload/subdomain' -mindepth 1 -mmin +1 -delete
* * * * * derakupload /opt/script/delete_files_older_than
下面的工作中的脚本如下所示
#!/bin/bash
find $HOME/subdomain -mindepth 1 -type f -mmin +1 -delete
我尝试过在特定时间运行它,而不是直接全部运行,但没有成功。
我不知道我做错了什么。
答案1
这是一个长期存在混淆的问题,因为系统 crontabs (/etc/crontab
以及 中的相关文件/etc/cron.d
) 和用户 crontabs (包括用户的 crontab root
,通常通过 访问sudo crontab -e
) 之间存在差异 -DEBIAN SPECIFIC
摘自 的部分man cron
:
Support for /etc/cron.d is included in the cron daemon itself, which
handles this location as the system-wide crontab spool. This directory
can contain any file defining tasks following the format used in
/etc/crontab, i.e. unlike the user cron spool, these files must provide
the username to run the task as in the task definition.
如果你确实需要find
以用户身份运行该命令derakupload
,那么你可以直接通过自己的 crontab 执行此操作,例如
sudo -u derakupload crontab -e
或添加它(和用户字段)更改为/etc/crontab
。
或者,如果find
命令可以以 root 身份运行,则只需使用 root 的 crontab sudo crontab -e
,但忽略用户字段derakupload
。