我有一个备份脚本,每天在我的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菜单中选择关闭时,会提醒我(或其他用户)备份仍在运行的脚本
另一个入门解决方案:在关机期间,系统运行/etc/init.d/中的脚本(或者实际上是/etc/rc.*/中的脚本,但你明白了。)你可以创建一个该目录中用于检查备份状态的脚本,延迟关闭直到备份完成。或者更好的是,它可以优雅地中断您的备份。
超级用户可以解决此脚本(例如,使用/ sbin / halt),但是如果超级用户真正设置了这样做,则无法阻止超级用户执行任何操作。
有 莫莉后卫 防止意外关闭,重新启动等,直到满足所有要求的条件 - 条件可以自我定义。
如前所述,您也可以在关机过程中执行备份操作。例如,参见 这一页。
除了完整的解决方案之外,你可以将关闭命令作为别名,然后使用类似的脚本
#!/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
保存在用户的路径中作为关闭。我希望会有一些变化取决于您的用户如何调用关闭(窗口管理器图标/命令行)以及可能还有不同的发行版。
我不禁觉得你不是在讨论Unix的比喻,而你所要求的是一个kludge。
如果用户以root身份运行,那么根本没有root可以阻止root关闭系统!你可以做一些窗口修饰,比如模糊关闭UI,但这并没有真正完成任何事情。
我无法分辨你是在多用户机器的环境中讨论这个问题,还是将一台机器用作“桌面PC”而单个用户坐在控制台上。如果是前者,那么您的用户实际上不应该使用可以关闭系统以进行日常活动的凭据来访问计算机。如果是后者,我建议教育用户(a)检查脚本是否正在运行,或者(b)使用您指定的特定关闭脚本检查脚本的进程并拒绝关闭直到它消失。
但是当我从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命令。要阻止来自命令行的重启/ etc命令,可以使用molly-guard - 如中所述 https://askubuntu.com/questions/17187/disabling-shutdown-command-for-all-users-even-root-consequences/17255#17255