Проблема: перезагружать или выключать сервер может только root пользователь. Чтобы бойти это ограничение можно дать возможность пользователям устанавливать флаг на эти действия, который раз в минуту будет считываться root по cron заданию.
Далее описана небольшая конструкция, которая позволяет любому пользователю перезагружать или выключать систему. Её можно модифицировать и ограничить определёнными пользователями, но сама логика будет прежней.
Чтобы всё заработало crontab -e от лица root пользователя ставим в конец:
@reboot /usr/bin/bash /root/sys_action.sh
Этот скрипт будет стартовать с системой, ежеминутно проверяя наличие флага на перезагрузку или выключение от пользователей.
В сам файл /root/sys_action.sh пишем:
# очищаем запланированные операции echo '' > /tmp/sys_action # даём доступ всем пользователям chmod 766 /tmp/sys_action # бесконечный цикл до тех пор, пока в файле /tmp/sys_action не появится команда, которая считывается раз в 60 секунд while true do if [ -f /tmp/sys_action ]; then if [[ "$(cat /tmp/sys_action)" == 'reboot' ]]; then echo 'Перезагрузка сервера'; systemctl reboot; fi if [[ "$(cat /tmp/sys_action)" == 'poweroff' ]]; then echo 'Выключение сервера'; systemctl poweroff; fi fi sleep 60 done
Теперь любой пользователь может вызывать перезагрузку, если выполнит команду:
echo 'poweroff' > /tmp/sys_action
Можно вынести эту команду в алиас, в файл .bashrc в домашней папке пользователя:
alias poweroff='echo "poweroff" > /tmp/sys_action'
Тогда можно будет просто набирать poweroff в консоли и сервер выключится максимум через 60 секунд.