Как отключить отключение, чтобы важный процесс не мог быть прерван?

10

Какой самый простой способ отключить или временно приостановить перезагрузку / выключение, когда запущен важный процесс? Процесс занимает слишком много времени для завершения и не может быть приостановлен / возобновлен, поэтому я хотел бы избежать выключения компьютера во время его работы. Он запускается из cron, поэтому если я не проверю запущенные процессы вручную, я не узнаю, что он запущен. Спасибо.

zang3tsu
источник
5
Возможные дубликаты: SO: Временно запретите отключение Linux , подсказки ответов на разных уровнях, на которых это можно сделать, например, сценарии оболочки или управление питанием среды рабочего стола.
sr_
Я не думаю, что ответ достаточно конкретен без объяснения уровней выполнения или ссылки на объяснение. Это не в U & L SE. Могу я спросить, какой дистрибутив и версию вы используете?
BSD
Вместо того, чтобы изменять процедуру завершения работы, напишите оболочку, чтобы задание показывало, что оно завершено, отправьте по почте или коснитесь файла. Проверьте выполнение задания, затем завершите работу. (cron отправляет выходные данные своих работ владельцу, но это можно настроить).
BSD

Ответы:

1

Запустите, which shutdownчтобы увидеть, где находится путь к программе выключения. Вы можете переименовать файл, хотя я рекомендую против этого.

Еще один (более безопасный) метод. Используйте псевдоним: alias shutdown=' ' что-то вроде этого более обратимо. Если вы пытаетесь предотвратить завершение работы всех пользователей, добавьте псевдоним глобально.

Эмиль
источник
Я думаю об использовании псевдонима, теперь мне просто нужно написать свой сценарий. Спасибо!
zang3tsu
Как насчет других команд, таких как остановка или выключение питания. Вам нужно создать псевдоним / переименовать их тоже?
mintyfreshpenguin
17

Для более новых систем с systemd это было решено с помощью systemd-inhibit. Пример использования:

systemd-inhibit --why="Doing weekly backup" bash my-backups.sh

Затем, если пользователь попытается завершить работу, он не будет допущен, если не будет принудительно завершен.

❯ systemctl poweroff
Operation inhibited by "bash my-backups.sh" (PID 2414 "systemd-inhibit", user ntrrgc),
reason is "Doing weekly backup".
Please retry operation after closing inhibitors and logging out other users.
Alternatively, ignore inhibitors and users with 'systemctl poweroff -i'.
Алисия
источник
Однако есть проблема: неинтерактивный запуск его с правами root будет игнорировать блокировки. github.com/systemd/systemd/issues/2680
Алисия
Я думаю, что вы неправильно прочитали этот отчет об ошибке, они говорят о том, что не могут работать poweroffкак root
Ferrybig
Как я неправильно прочитал отчет об ошибке? : S
Алисия
2

Отключите команды «shutdown / reboot / poweroff / halt / hostname», такие как на критически важных серверах

chmod 0 /sbin/shutdown

затем, если вам нужно его использовать, выполните команду chmod chmod 0755.

Danny
источник
1
Как насчет halt, poweroffи systemctl poweroff?
Мартин Юдинг
1

Я бы отключил команду в файле / etc / sudoers, чтобы ее мог выполнить только root.

в / etc / sudoers

# Cmnd alias specification
Cmnd_Alias     SHUTDOWN = /sbin/shutdown

# User privilege specification
root    ALL=(ALL:ALL) ALL
vmule   ALL=(ALL:ALL) ALL, !SHUTDOWN

и когда я пытаюсь запустить команду:

vmule@debian:~$ sudo /sbin/shutdown  -r now
Sorry, user vmule is not allowed to execute '/sbin/shutdown -r now' as root on debian.vm
vmule
источник
Можете ли вы разработать свой ответ? завершение работы не может быть явно указано в / etc / sudoers.
Архемар
Конечно, я отредактировал ответ с лучшим объяснением. Приветствия
vmule
0

Я хотел запретить локальному пользователю выключать ноутбук во время обновления. Отключение устройства ввода было лучшим способом. Для меня было достаточно отключить мышь, но клавиатуру тоже можно отключить.

Конечно, есть недостаток, компьютер не может быть использован в этот период.

Отключить ввод с клавиатуры и мыши в Unix (под X)

Даниэль Ф
источник
-1

shutdownТехнически это тоже приложение, которое вы можете удалить. Беги which shutdown. whichэто команда, которая показывает путь к приложению В моем случае вывод есть /sbin/shutdown. Это файл, так что вы можете просто сделать rm shutdown. Или, если вы хотите отключить его, временно скопируйте его, измените имя и удалите оригинальный файл.

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

Уильям Эдвардс
источник
3
Почему -rфлаг? Вам не понадобится это для одного файла, и если вы что-то наберете, произойдет катастрофа.
MadTux