Crontab не регистрирует изменения скриптом - PullRequest
0 голосов
/ 29 августа 2018

Я использую python subprocess, чтобы внести изменения в crontab, в частности используя:

subprocess.Popen(["crontab", cron_tab_file])

Это все работает нормально, и когда я проверяю crontab, используя crontab -l, все в cron_tab_file есть. Тем не менее, ничего не работает.

Я всегда использовал полные пути, например .:

* * * * * /bin/bash /full/path/to/test.sh

Однако, если я снова сохраню crontab из терминала, используя crontab -e, фактически ничего не меняя, crontab внезапно становится активным и начинает запускать команды в нем. Я не понимаю, не должен ли cron запускаться контентом в crontab без необходимости ручного обновления? Я использую MacOS Sierra. Такое поведение cron беспокоит меня, и я нигде не могу найти решения или объяснения в Интернете. Я делал повторные попытки, и каждый раз, когда редактирование с помощью скрипта Python не работает, и если я изменяю его, сохраняя вручную, оно неожиданно срабатывает.

Дополнительная информация

Я проверил /usr/lib/cron/tabs с привилегией sudo, и мой файл cron всегда изменяется, будь то я или скрипт. но если это был сценарий, который изменил его, то изменение не запустится. Если я отредактировал его вручную, появится сообщение crontab: installing new crontab и будут запущены новые команды. Есть ли команда, чтобы заставить cron установить новый crontab?

1 Ответ

0 голосов
/ 29 августа 2018

Я только что обнаружил очень уродливый обходной путь.

def activate_cron():
    execute = subprocess.Popen(["echo", "\033:wq\n"], stdout=subprocess.PIPE)
    activate = subprocess.Popen(["crontab", "-e"], stdin=execute.stdout)
    # Wait for crontab to save
    time.sleep(5)
    activate.kill()

Это выдаст crontab: installing new crontab и, наконец, активирует мои мелкие задания ..

...