Я пытаюсь запустить простой сценарий bash, который выключает мой ноутбук, если он не подключен к сети переменного тока, с помощью задания cron.
Мой сценарий выглядит следующим образом:
#!/bin/bash
if ! on_ac_power; then
poweroff
fi
И я настроил cron на запуск его каждую минуту следующим образом:
*/1 * * * * /home/user/Documents/script.sh
Сценарий отлично работает, если я запускаю его вручную, но в противном случае, похоже, он не имеет никакого эффекта под cron.
Что я упускаю?
Во-первых, я не запускал свой cron под root.
Очевидно, что для запуска cron под root необходимо добавить его с помощью sudo crontab -e
, все, что добавлено только с помощью crontab -e
, не будет работать как sudo.
Второе, как указано в справке:
cron по умолчанию работает в очень ограниченной среде, поэтому многие команды, которые запускаются через имя команды с пользовательского терминала, должны указывать полный путь в crontab или объявлении в начале crontab, чтобы расширить путь.
В итоге я заменил poweroff
на / sbin / shutdown
в моем скрипте, и теперь он работает должным образом.
#!/bin/bash
if ! on_ac_power;
then
/sbin/shutdown
fi