2008-11-26 8 views
11

У меня есть сценарий резервного копирования, который работает в фоновом режиме ежедневно на моем компьютере Linux (Fedora 9). Если компьютер остановлен во время резервного копирования, резервная копия может быть повреждена, поэтому я хотел бы написать небольшой скрипт, который временно отключает возможность перезагрузки или закрытия компьютера.Временно запретить запуск Linux

Нет необходимости в том, чтобы сценарий был необратимым, это просто, чтобы пользователи системы знали, что выполняется резервное копирование, и они не должны закрываться. Я видел метод Inhibit в спецификации управления питанием DBus Free desktop: http://people.freedesktop.org/~hughsient/temp/power-management-spec-0.3.html , но это только предотвращает выключение, если система простаивает явно не по запросу пользователя.

Есть ли простой способ сделать это в C/Python/Perl или bash?

Обновление: Для уточнения вопроса, приведенного выше, это машина с несколькими пользователями, но она использует ее последовательно через подключенную клавиатуру/мышь. Я не ищу систему, которая помешала бы мне «взломать» ее как root. Но сценарий, который напомнил бы мне (или другому пользователю), что резервная копия все еще работает, когда я выбираю выключение из меню Gnome/GDM

+0

было бы полезно, если бы вы могли сказать, является ли это настольным или сервером, как предлагает @adjuster. – Brabster 2008-11-26 22:19:46

ответ

1

Больше, чем вы начинали, чем полное решение, вы могли бы скрыть выключение команду, а затем использовать сценарий, например

#!/bin/sh 
ps -ef|grep backupprocess|grep -v grep > /dev/null 
if [ "$?" -eq 0 ]; then 
echo Backup in progress: aborted shutdown 
exit 0 
else 
echo Backup not in progress: shutting down 
shutdown-alias -h now 
fi 

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

+1

, который не всегда работает, поскольку во многих случаях выключение вызывается напрямую, то есть/sbin/shutdown – 2012-03-19 19:42:01

0

Я не могу не почувствовать, что вы не собираете метафору Unix, и то, о чем вы просите, - это kludge.

Если пользователь работает от имени пользователя root, ни один корень не может сделать, чтобы остановить root от выключения системы! Вы можете делать такие вещи, как скрытый пользовательский интерфейс, но это ничего не значит.

Я не могу сказать, говоришь ли вы об этом в контексте многопользовательской машины или машины, которая используется как «настольный ПК» с одним пользователем, сидящим на консоли. Если это первый, ваши пользователи действительно не должны обращаться к машине с учетными данными, которые могут отключать систему для повседневных действий. Если это последнее, я бы рекомендовал обучить пользователей либо (а) проверить, что сценарий запущен, либо (б) использовать конкретный сценарий выключения, который вы обозначаете, который проверяет процесс сценария и отказывается завершить работу, пока он не исчезнет.

+0

Рассмотрите обновление прошивки в многопользовательской среде, где случайные процессы могут перезагрузить вашу коробку по любой причине. Вы можете просто добавить дополнительный элемент управления. – 2017-10-05 12:57:31

7

Другое решение для запуска: во время выключения система запускает сценарии в /etc/init.d/ (или действительно, скрипт в /etc/rc.*/, но вы получаете идею.) Вы можете создать сценарий в этом каталоге, который проверяет состояние вашей резервной копии, и задержки завершаются до завершения резервного копирования. Или еще лучше, он изящно прерывает вашу резервную копию.

Суперпользователь может обойти этот сценарий (например, с помощью/sbin/halt), но вы не можете помешать суперпользователю делать что-либо, если их разум действительно настроен на это.

2

Если пользователи будут отключены через GNOME/KDE, только запрещает этим делать.

http://live.gnome.org/GnomePowerManager/FAQ#head-1cf52551bcec3107d7bae8c332fd292ec2261760

+0

Эта ссылка умерла: «Эта страница еще не существует. Вы можете создать новую пустую страницу или использовать один из шаблонов страниц». – 2016-04-16 10:56:04

4

Существует molly-guard для предотвращения случайного shutdows, перезагружается и т.д.пока не будут выполнены все необходимые условия - условия могут быть определены сами собой.

Как уже было предложено, вы также можете выполнять операции резервного копирования как часть процесса останова. См. Например, this page.

0

Но сценарий, который будет напоминать мне (или другого пользователя), что резервная копия все еще работает, когда я выбираю выключить из меню Gnome/GDM

можно использовать polkit полностью заблокировать выключение/перезапуск - но мне не удалось найти метод, который бы дал четкий ответ, почему он заблокирован.

Добавление следующих строк в качестве /etc/polkit-1/localauthority/50-local.d/restrict-login-powermgmt.pkla работ:

[Disable lightdm PowerMgmt] 
Identity=unix-user:* 
Action=org.freedesktop.login1.reboot;org.freedesktop.login1.reboot-multiple-sessions;org.freedesktop.login1.power-off;org.freedesktop.login1.power-off-multiple-sessions;org.freedesktop.login1.suspend;org.freedesktop.login1.suspend-multiple-sessions;org.freedesktop.login1.hibernate;org.freedesktop.login1.hibernate-multiple-sessions 
ResultAny=no 
ResultInactive=no 
ResultActive=no 

Вы все еще видите окно подтверждения, но там нет кнопки для подтверждения. Выглядит уродливо, но работает;)

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

Обратите внимание, что этот метод блокирует исключительно перезагрузку/etc команды, выпущенные из графического интерфейса. Чтобы заблокировать команды перезагрузки/etc из командной строки, можно использовать молли-охранник - как объяснено в https://askubuntu.com/questions/17187/disabling-shutdown-command-for-all-users-even-root-consequences/17255#17255