如何在Linux中将文件移动到cron.d?

时间:2019-04-17 12:26:02

标签: linux ubuntu cron raspbian

my_cron文件/etc/cron.d/中直接创建时有效:

sudo nano /etc/cron.d/my_cron

# Add content:
* * * * * username /path/to/python /path/to/file 2>/path/to/log

但是它在我将其复制/移动到目录中时不起作用

sudo cp ./my_cron /etc/cron.d/my_cron

ls -l /etc/cron.d两次都输出相同的权限-rw-r--r--。这些文件归root所有。

目前我唯一能想到的原因是我必须在复制后刷新/激活某些内容,这在创建时会自动发生。

在Ubuntu和Raspbian上进行了测试。

有什么主意吗?谢谢!

1 个答案:

答案 0 :(得分:1)

较旧的cron守护程序仅在发现目录或/etc/cron.d的上次修改时间戳自上次更改以来才用于检查/etc/crontab的更新内容cron扫描了它。最近的cron守护程序还检查了/etc/cron.d中各个文件的时间戳,但也许您在这里处理的是旧文件。

如果您有旧的cron,则如果将全新文件复制到/etc/cron.d中,则目录的时间戳应该更改,cron应该会注意到新文件。  但是,如果您的cp仅覆盖现有文件,则不会更改目录时间戳,并且cron也不会获取新文件的内容。

/etc/cron.d中就地编辑文件不一定会更新目录时间戳,但是某些编辑器(肯定是vi,除非您另行配置)会创建临时工作文件,也许还会待编辑文件所在目录中的备份文件。创建和删除其他文件将导致目录时间戳记更新,并使cron使编辑后的文件生效。这可以解释为什么编辑对您的行为不同于cp

要强制更新时间戳,您可以执行sudo touch /etc/crontab之类的操作,也可以在完成/etc/cron.d之后在cp中创建并立即删除暂存文件(或目录)。或rm在那里的文件。显然touch更容易。如果您想执行create + delete路线,那么mktemp将是一个很好的工具,以避免破坏他人的合法文件。

如果您真的很偏执,那么您至少要等一秒钟,然后再进行文件更改,然后执行您选择执行的任何操作以强制更新时间戳。那应该避免cron重新扫描,文件更新以及touch或临时创建+删除都可能在时间戳的粒度内发生的情况。

如果您想查看自己的cron在做什么,可以sudo strace -p <pid-of-cron>。通常,它每次一次睡眠一分钟,但是每次唤醒时,您会stat看到它一些文件和目录(包括/etc/crontab/etc/cron.d)。当然,如果它决定需要执行一项工作,您也会看到该活动。