Рейтинг:0

Задание Cron для отключения питания, когда переменный ток отключен, не работает

флаг in

Я пытаюсь запустить простой скрипт bash, который выключает мой ноутбук, если он не подключен к сети переменного тока с заданием cron.

Мой сценарий выглядит следующим образом:

#!/бин/баш

если ! on_ac_power; тогда 
    выключение          
фи

И я настроил cron так, чтобы он запускался каждую минуту:

*/1 * * * * /home/user/Documents/script.sh

Сценарий отлично работает, если я запускаю его вручную, но в остальном он не работает под cron.

Что мне здесь не хватает?

флаг cn
Cron не подходит для этого. То, что вы хотите, это услуга. что такое `on_ac_power`? это ничего не дает, когда на переменном токе и когда нет на переменном токе, поэтому кажется бесполезным для этого. И poweroff я бы добавил каталог.
флаг in
@Rinzwind `on_ac_power` проверяет, работает ли компьютер от сети. Добавить каталог сделать poweroff, как так? Как я уже сказал, скрипт работает нормально, если я запускаю его вручную, но похоже, что cron его не запускает.
флаг us
Помимо предыдущего комментария, `poweroff` должен требовать привилегий root; `sudo poweroff` может работать, если рассматриваемому пользователю не требуется вводить пароль. А еще лучше, поместите запись cron в `/etc/crontab` и укажите, что она должна выполняться как `root` (конечно, в этом случае сценарий также следует переместить в подходящее место).
Soren A avatar
флаг mx
@MarkusUeberall никогда не использует `sudo` в скриптах и ​​никогда в вещах, которые нужно запускать в cron !! Вместо этого запустите скрипт в cron root, если это необходимо.
Soren A avatar
флаг mx
@MarkusUeberall, кстати, `poweroff` (/usr/sbin/poweroff) похож на /bin/systemctl wgich может быть запущен кем угодно, так что `sudo` в любом случае не нужен.
флаг us
@Soren A: `/bin/systemctl` _может_ выполняться кем угодно, но выполнение `poweroff` от имени пользователя без полномочий root не обязательно будет работать, если другие пользователи вошли в систему (см. `poweroff -i`, который я на самом деле забыл упоминалось выше); `sudo poweroff` _всегда_ работает сразу.
Soren A avatar
флаг mx
@MarkusUeberall .. но `sudo` не работает в crontab ... скрипт должен запускаться в cron root. Что касается зарегистрированных пользователей, то в домашних системах редко бывает более одного пользователя. но, конечно же, об этом нужно знать в более крупных системах.
флаг us
@soren `sudo` _does_ работает в crontab, если вам не нужно вводить пароль (см., например, https://askubuntu.com/questions/796617/how-to-avoid-password-request-for-sudo -для crontab-скриптов); стоит ли использовать его для варианта использования OP - это другой вопрос (см. предыдущие комментарии, указывающие на службу, и `/etc/crontab`, посвященные этому).
James S. avatar
флаг de
Пожалуйста, уточните в своем вопросе выше полную команду, которую вы выполняете при запуске команды вручную, а также вывод ls, показывающий разрешения файловой системы для сценария.
Рейтинг:1
флаг in

Прежде всего, я не запускал свой cron под root.

По-видимому, для запуска cron под root вы должны добавить его с помощью судо кронтаб -е, все, что добавлено только с помощью кронтаб -е не будет работать как sudo.

Во-вторых, как указано в ссылке:

cron по умолчанию запускается в очень ограниченной среде, поэтому многим командам, которые запускаются через имя команды с пользовательского терминала, требуется полный путь в crontab или объявление в начале crontab, чтобы расширить путь.

Так что я закончил тем, что заменил выключение к /sbin/выключение в моем сценарии, и теперь он работает, как и ожидалось.

#!/бин/баш

если ! on_ac_power; 
тогда 
    /sbin/выключение        
фи

Справка

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.