Старые cron
демоны, используемые для проверки /etc/cron.d
на наличие обновленного содержимого, только когда они увидели, что последняя измененная отметка времени этого каталога или файла /etc/crontab
изменилась с момента последнего сканирования cron
,Последние cron
демоны также проверяют временные метки отдельных файлов в /etc/cron.d
, но, возможно, вы имеете дело со старым здесь.
Если у вас есть старый cron
, то, если вы скопировали маркуновый файл в /etc/cron.d
, тогда метка времени каталога должна измениться, и cron
должен заметить новый файл.Однако, если ваш cp
просто перезаписывает существующий файл, это не изменит временную метку каталога, а cron
не приведет к получению нового содержимого файла.
Редактирование файла на месте в /etc/cron.d
не обязательно будет обновлять временную метку каталога, но некоторые редакторы (конечно, vi
, если вы не настроили это иначе) будут создавать временные рабочие файлы и, возможно, файл резервной копии в каталоге, где находится редактируемый файл.Создание и удаление этих других файлов приведет к обновлению временной метки каталога, и это заставит cron
применить отредактированный файл к действию.Это может объяснить, почему редактирование для вас ведет себя иначе, чем cp
. Ing.
Чтобы принудительно обновить отметку времени, вы можете сделать что-то вроде sudo touch /etc/crontab
или создать и немедленно удалить файл с нулями (или каталог).) в /etc/cron.d
после того, как вы cp
'редактировали или rm
' редактировали файл там.Очевидно, touch
проще.Если вы хотите пойти по маршруту создания + удаления, тогда mktemp
будет хорошим инструментом для этого, чтобы не задевать чужой законный файл.
Если бы вы были действительно параноиком, вы бы подождалипо крайней мере, секунду между внесением изменений в файл и последующим выполнением того, что вы хотите сделать, чтобы принудительно обновить отметку времени.Это должно исключить ситуацию, когда повторное сканирование cron
, ваши обновления файлов и touch
или создание нуля + все могут произойти в пределах детализации временной отметки.
Если вы хотите увидеть, что ваше cron
на самом деле делает, вы можете sudo strace -p <pid-of-cron>
.В основном он спит по одной минуте, но вы увидите stat
некоторых файлов и каталогов (включая /etc/crontab
и /etc/cron.d
) каждый раз, когда он просыпается.И, конечно, если он решит, что ему нужно выполнить задание, вы тоже увидите это действие.