12

我有一个备份脚本,每天在我的 linux (Fedora 9) 计算机上运行。如果在备份过程中关闭计算机,则备份可能已损坏,因此我想编写一个小脚本,暂时禁用用户重新启动或关闭计算机的能力。

脚本不一定是不可绕过的,只是让系统的用户知道备份正在进行中,他们不应该关闭。我在 DBus Free 桌面电源管理规范中看到了 Inhibit 方法:http: //people.freedesktop.org/~hughsient/temp/power-management-spec-0.3.html 但这只会在系统空闲时防止关机未明确应用户要求。

有没有一种简单的方法可以在 C/Python/Perl 或 bash 中做到这一点?

更新:为了澄清上面的问题,它是一台有多个用户的机器,但他们通过插入的键盘/鼠标顺序使用它。我不是在寻找一个可以阻止我以 root 身份“破解”它的系统。但是当我从 Gnome/GDM 菜单中选择关闭时,一个脚本会提醒我(或其他用户)备份仍在运行

4

6 回答 6

8

另一个让你开始的解决方案:在关机期间,系统运行 /etc/init.d/ 中的脚本(或者实际上是 /etc/rc.*/ 中的脚本,但你明白了。)你可以创建一个该目录中的脚本检查备份的状态,并延迟关闭,直到备份完成。或者更好的是,它会优雅地中断您的备份。

超级用户可以解决这个脚本(例如使用 /sbin/halt),但是如果超级用户真的下定决心去做任何事情,你就不能阻止他们做任何事情。

于 2008-11-26T22:12:14.623 回答
5

molly-guard可防止意外关闭、重新启动等,直到满足所有要求的条件 - 条件可以自定义。

正如已经建议的那样,您也可以在关机过程中执行备份操作。参见例如这个页面

于 2013-05-19T13:27:26.150 回答
2

如果用户要通过 GNOME/KDE 关闭,只需禁止他们这样做。

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

于 2009-03-13T03:49:21.473 回答
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

保存在用户的路径中作为关机。我预计会有一些变化取决于您的用户如何调用关闭(窗口管理器图标/命令行),并且可能也适用于不同的发行版。

于 2008-11-26T21:58:45.397 回答
1

我不禁觉得您并没有理解 Unix 的隐喻,而您所要求的只是一个杂物。

如果用户以 root 身份运行,则 root 无法阻止 root 关闭系统!你可以做一些装点门面的事情,比如模糊关机 UI,但这并不能真正完成任何事情。

我不知道您是在多用户机器的上下文中谈论这个,还是在单个用户坐在控制台前用作“台式电脑”的机器。如果是前者,您的用户真的不应该使用可以关闭系统以进行日常活动的凭据访问机器。如果是后者,我建议教育用户 (a) 检查脚本是否正在运行,或者 (b) 使用您指定的特定关闭脚本来检查脚本的进程并拒绝关闭,直到它消失。

于 2008-11-26T22:12:05.293 回答
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 会话,因此如果需要,您必须添加第二条规则以将它们列入白名单。

请注意,此方法仅阻止从 GUI 发出的 reboot/etc 命令。要从命令行阻止重启/等命令,可以使用 molly-guard - 如https://askubuntu.com/questions/17187/disabling-shutdown-command-for-all-users-even-root-consequences/17255中所述#17255

于 2016-04-16T10:58:29.883 回答