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

在Linux中如何将文件移动到cron.d?,linux,ubuntu,cron,raspbian,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--。这些文件归

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上测试


有什么想法吗?谢谢

较旧的
cron
守护进程,仅当它们看到该目录或
/etc/crontab
文件的上次修改时间戳自上次
cron
扫描以来已更改时,才用于检查
/etc/cron.d
更新的内容。最近的
cron
守护进程也会检查
/etc/cron.d
中各个文件的时间戳,但这里可能处理的是一个旧文件

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

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

要强制更新时间戳,您可以执行类似于
sudo touch/etc/crontab
的操作,或者在
cp
rm
/etc/cron.d
中添加文件后,在
/cp
中创建并立即删除一个临时文件(或目录)。显然,
触摸
更容易。如果您想使用创建+删除路径,那么
mktemp
将是一个很好的工具,以避免重击其他人的合法文件

如果你真的有妄想症,你会在更改文件和执行任何你选择的操作来强制更新时间戳之间至少等待一秒钟。这样可以避免
cron
重新扫描、文件更新以及
touch
或scratch create+delete都可能在时间戳的粒度内发生的情况

如果您想查看您的
cron
实际上在做什么,您可以
sudo strace-p
。大多数情况下,它一次只睡一分钟,但每次醒来时,您都会看到一些文件和目录(包括
/etc/crontab
/etc/cron.d
)。当然,如果它决定需要运行作业,您也会看到该活动