Mar*_*uer 6 linux archlinux system-shutdown systemd
我正在运行基于Arch的Manjaro Linux并为自己编写了一个小程序,每7个小时启动一次,并在后台完全运行.此更新程序由systemd启动.
我想知道的是:无论用户是想关闭它还是任何程序想要这样做,我怎样才能防止在程序运行期间任何系统关闭/重启.
最好的是,如果任何关闭/重启动作不会被取消而是延迟,那么当更新程序完成运行时,关机/重启将继续.
我的系统部分是:
uupgrades.timer
[Unit]
Description=UU Upgrades Timer
[Timer]
OnBootSec=23min
OnUnitActiveSec=7h
Unit=uupgrades.target
[Install]
WantedBy=basic.target
Run Code Online (Sandbox Code Playgroud)
uupgrades.target
[Unit]
Description=UU Upgrades Timer Target
StopWhenUnneeded=yes
Run Code Online (Sandbox Code Playgroud)
并在文件夹uupgrades.target.wants中
uupgrades.service
[Unit]
Description=UU Update Program
[Service]
Nice=19
IOSchedulingClass=2
IOSchedulingPriority=7
ExecStart=/usr/bin/uupgrades
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
当我想阻止自己重新启动或关闭时,我将常用的关闭和重新启动别名设置为beep;beep;beep;.
在多用户环境中,您可以移动reboot等shutdown二进制文件,然后在再次允许关闭时将它们移回来。您还可以临时移动输出有关推迟关闭可能性的信息的可执行 shell 脚本来代替相应的二进制文件。如果请求关闭,此脚本可以设置一个标志。
Q&D 示例脚本:
#!/usr/bin/env bash
echo "preventing reboot"
BACKUPBINARY_REBOOT=$(mktemp);
mv /bin/reboot $BACKUPBINARY_REBOOT;
FLAGFILE=$(mktemp);
echo '#!/usr/bin/env bash' > /bin/reboot;
echo '# original reboot binary was moved to'"$BACKUPBINARY_REBOOT" >> /bin/reboot;
echo 'echo request-reboot > '"$FLAGFILE" >> /bin/reboot;
echo 'echo reboot is prevented, your request will trigger later' >> /bin/reboot;
chmod 666 "$FLAGFILE";
chmod +x /bin/reboot;
echo "postponed reboot - press enter to allow it again and make up for requested reboot";
read;
mv "$BACKUPBINARY_REBOOT" /bin/reboot;
if grep -q request-reboot "$FLAGFILE"; then
rm $FLAGFILE;
/bin/reboot;
fi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1021 次 |
| 最近记录: |