Crontab не будет запускать скрипты - PullRequest
0 голосов
/ 28 октября 2019

У меня световое шоу на моем малиновом пи. У меня также есть crontab для его автоматизации. Когда я запускаю скрипт в терминале, он работает нормально и работает безупречно. Когда cron запускается, он не будет работать правильно. У меня настроено выключить свет за 15 секунд до шоу, запустить шоу, через 15 секунд включить их снова. Теперь, когда задание запускается, оно воспроизводит только шоу, а реле никогда не срабатывает, чтобы включить или выключить свет. У меня есть 3 сценария. Одним из них является шоу, а 2 включают и выключают свет. Я действительно смущен здесь.

Запуск шоу

/home/pi/lightshowpi/./lightsoff.sh
sleep 15
$SYNCHRONIZED_LIGHTS_HOME/bin/start_playlist_once $SYNCHRONIZED_LIGHTS_HOME/mus$
sleep 15
/home/pi/lightshowpi/./lightson.sh

Подсветка включена

#!/bin/bash
export SYNCHRONIZED_LIGHTS_HOME=/home/pi/lightshowpi
python py/hardware_controller.py --config=overmech.cfg --state=on

Подсветка выключена

#!/bin/bash    
export SYNCHRONIZED_LIGHTS_HOME=/home/pi/lightshowpi   
python py/hardware_controller.py --config=overmech.cfg --state=off

Все это .sh файлы с chmod +x. Спасибо

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Есть пара вещей, которые вы должны исправить, независимо от того, является ли это виновником, изменив их, ваш crontab должен работать.

Прежде всего, как и все остальные, убедитесь, что ваши сценарии оболочки имеют это или его эквивалентв вашей системе. Вы также можете перенаправить sdout и stderrr в свой crontab, используя что-то похожее на это в вашем crontab:

*/15 * * * * /bin/bash /home/pi/lightshowpi/lightson.sh  2&>1 >> lights_on_log.txt

Используя 2 &> 1, вы добавите stdout и stderr к этому файлу в домашнем каталоге дляпользователь, выполняющий задание cron, таким образом, вы можете просмотреть вывод и ошибки и точно выяснить, в чем проблема.

Наиболее вероятная причина проблемы заключается в том, что вы не используете полный путь кбинарный python, т.е. / usr / bin / python Вместо просто

python

Еще одна вещь, на которую вы, вероятно, должны обратить внимание, это то, что аргументы командной строки для обоих сценариев используют относительные пути и в зависимости от того, какой пользовательЗадание cron запущено, так как это может вызвать проблемы. Перейдите в любой каталог, в котором находится каталог py и файл overmech.cfg, или убедитесь, что для них также используются полные пути.

Последний бит, на который я хотел бы указать (я сохранил его последним, потому что он неэто не очень много значит), что один из ваших примеров показывает, что

/home/pi/lightshowpi/./lightsoff.sh

. является избыточным и не нужен. Точка-косая черта используется как средство сокращения полного пути к файлу в текущем каталоге с тех пор. расширяется до текущего рабочего каталога и / помогает создать последний бит пути. В приведенном выше примере вы без проблем обойдетесь. и просто используя полный путь, как это:

    /home/pi/lightshowpi/lightsoff.sh
0 голосов
/ 28 октября 2019

Я не знаю, с чем работают cronjobs PATH, но, возможно, он не находит исполняемый файл python. Попробуйте ввести полный путь:

#!/bin/bash
export SYNCHRONIZED_LIGHTS_HOME=/home/pi/lightshowpi
/usr/bin/python py/hardware_controller.py --config=overmech.cfg --state=on

Предположим, что python находится в / usr / bin.

Я бы также указал абсолютный путь к py/hardware_controller.py, но я нене знаю, где вы положили его:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...