Перезагрузка Linux из скрипта

4

У меня есть резервный скрипт, который выполняется ежедневно с помощью задания cron. Это копирование с FTP-серверов и подключенных жестких дисков USB, баз данных и т. Д.

В конце сценария я хочу перезагрузить компьютер с Linux, поэтому я добавил конец сценария:

reboot

Но если на следующий день набрать uptime, то обнаружится, что он не перезагрузился. Задание cron выполняется пользователем root, поэтому мне не нужно ставить sudo или su перед командой afaik. Поэтому вместо этого я попробовал другие варианты команды, такие как:

shutdown -t 10 -r
shutdown -r now
/sbin/shutdown -t 10 -r
/sbin/shutdown -r now
/sbin/reboot

Одна попытка за раз, конечно, не все вышеперечисленные 5 строк друг за другом. ПК просто не перезагружается.

У кого-нибудь есть идеи по этому поводу?

mr_lou
источник
Является ли скрипт исполняемым?
Remco Haszing
2
проверьте журналы примерно в то время, когда должна произойти перезагрузка. обратите внимание, что переменная PATH не получена из конфигурации оболочки для заданий cron, поэтому «завершение» не будет найдено.
Gung Foo
Это скрипт bash. И задание cron вызывается с использованием пути (/home/username/backup.sh), но отдельные команды в сценарии вызываются без путей, и все они работают нормально. Только команда перезагрузки отказывается выполняться.
3
Также добавьте logger команды внутри вашего скрипта (для записи соответствующих сообщений в системный журнал), чтобы проверить, действительно ли он запущен. Может быть даже logger -t $0 reboot is $(which reboot)
Basile Starynkevitch
Не существует ограничений на скрипты cron или shell для предотвращения перезагрузки. Я только что проверил это на виртуальной машине RHEL с успехом. Одна из очень веских причин для этого может заключаться в том, что в сценарии есть предыдущий возврат или ошибка, в результате чего сценарий останавливается до обработки команды перезагрузки. Попробуйте запустить скрипт вручную в оболочке в безопасное время. Следите за ошибками в задачах копирования файлов, которые преждевременно останавливают скрипт. Проверьте статус ошибки через echo $? после, если перезагрузка не работает. Разобрать скрипт, чтобы проверить, что он не заканчивается вручную перед вашей командой перезагрузки.
CoreyJJohnson

Ответы:

1

Адский способ перезагрузки это использовать

reboot -f

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

Также shutdown может не распознать аргумент "-t", взяв вместо этого аргумент time:

shutdown -r 10 //reboot in 10 minutes

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

s3nt1nel
источник
0

Разрешить перезагрузку для пользователя, использующего visudo

your_username ALL= /sbin/reboot

В вашем скрипте поменяйте reboot в sudo reboot

Alex Zaitsev
источник
1
Сценарий запускается с правами root, как это повлияет?
terdon