У меня есть только что созданный сценарий, который отлично работает под root. Я добавил задание cron, но оно работает неправильно
Команды:
gpio -g mode 17 input
getval="$(gpio read 17)"
todayis=$(date)
getstatus=$getval
if [ "$getstatus" = "0" ]; then
power="Power ON"
else
power="Power OFF"
echo $todayis $power $getstatus >> /var/www/turnmeon.log
Файл журнала при запуске от имени пользователя root:
Wed Nov 8 21:11:41 UTC 2017 Power ON 0
Файл журнала при запуске как crontab:
Wed Nov 8 21:11:41 UTC 2017 Power OFF
В конце нет 1, как я можно было бы ожидать, если бы OFF действительно было правдой.
Почему он запускается в командной строке bash, но не как задание crontab
*/2 * * * * bash /myscript.sh
Вероятная причина в том, что gpio
отсутствует в списке PATH
, доступном в cron. Укажите полный путь к вашей команде gpio, например
getval="$(/sbin/gpio read 17)"
Узнайте, где он находится в вашей системе, используя which gpio
.
Раньше меня это раздражало, потому что я много возился со встроенными решениями. Если сценарий более сложный, я обычно инициализирую PATH и LD _LIBRARY _PATH в самом начале, чтобы упростить задачу.