#python-3.x #cron #raspberry-pi
#python-3.x #cron #raspberry-pi
Вопрос:
У меня есть следующие две строки в crontab. Я ожидаю, что первая строка запустит мой скрипт на Python через 30 секунд после загрузки, а вторая строка завершит работу и перезапустит скрипт каждые две минуты.
@reboot (/bin/sleep 30; /usr/bin/python3 -u /home/pi/Desktop/file.py > /home/pi/Desktop/logfile 2>amp;1)
*/2 * * * * (kill $(pgrep -f 'python3 -u /home/pi/Desktop/file.py'); /usr/bin/python3 -u /home/pi/Desktop/file.py > /home/pi/Desktop/logfile 2>amp;1)
Скрипт выполняется корректно при загрузке, и скрипт завершается через две минуты, но скрипт не перезапускается второй строкой. Я не верю, что это синтаксическая ошибка, потому что, если я скопирую вторую строку непосредственно в терминал (без */2 * * * * ), он должным образом завершает работу и перезапускает скрипт. Почему эта строка работает в терминале, но не в crontab?
Заранее спасибо
Комментарии:
1. Нет необходимости заключать ваши команды в круглые скобки.
Ответ №1:
Я не уверен почему, но кажется, что crontab не будет выполнять никаких других команд в той же строке после команды ‘kill $ ()’. Я обнаружил это, поместив команды printf в файл журнала перед командой after kill, но в журнале оказалась только та, которая предшествовала kill. Я удалил команду kill, но оставил pgrep на ее месте, что привело к появлению первого текста printf, номера PID и второго текста printf в журнале. Моя работа заключалась в том, чтобы просто поместить две команды в файл оболочки и заставить crontab запустить оболочку. Кажется, работает просто отлично.