Как переместить файл в cron.d в Linux? - PullRequest
0 голосов
/ 17 апреля 2019

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 Ответ

1 голос
/ 18 апреля 2019

Старые 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) каждый раз, когда он просыпается.И, конечно, если он решит, что ему нужно выполнить задание, вы тоже увидите это действие.

...