是否可以将 Ubuntu 设置为在脚本完成之前不关闭?

Pil*_*ot6 15 shutdown backup scripts

我使用脚本对 btrfs 分区从一个磁盘到另一个磁盘进行增量备份。

该脚本由 cron.weekly 在一天的随机时间启动。

如果我在脚本运行时关闭系统,我会遇到删除旧备份而未创建新备份的麻烦。

有没有办法设置系统等待脚本完成?

我正在将 Ubuntu 16.04 与 systemd 一起使用。

Rin*_*ind 20

对于使用 systemd(默认)的 Ubuntu 16.04+。

systemd-inhibit --why="Wait for this script to finish" bash script.sh
Run Code Online (Sandbox Code Playgroud)

===

测试:

$ systemctl poweroff
Operation inhibited by "bash script.sh" (PID 23912 "systemd-inhibit", user rinzwind),
reason is "Wait for this script to finish".
Please retry operation after closing inhibitors and logging out other users.
Run Code Online (Sandbox Code Playgroud)

===

有7个锁

  • sleep 禁止(非特权)用户请求的系统挂起和休眠
  • shutdown 禁止(非特权)用户请求的高级系统断电和重启
  • idle 禁止系统进入空闲模式,可能导致系统自动挂起或关闭,具体取决于配置。
  • handle-power-key 禁止系统电源硬件密钥的低级(即登录内部)处理,允许(可能是无特权的)外部代码改为处理事件。
  • handle-suspend-key 禁止系统硬件挂起键的低级处理。
  • handle-hibernate-key 禁止系统硬件休眠键的低级处理。
  • handle-lid-switch 禁止对 systemd 硬件盖子开关的低级处理。

您可能还想防止suspend,idlehibernate


使用“包管理器”的示例

fd = Inhibit("shutdown:idle", "Package Manager", "Upgrade in progress...", "block");
/* ...
      do your work
                 ... */
close(fd);
Run Code Online (Sandbox Code Playgroud)

与此类似,您可以编写您的版本并在此脚本的末尾添加一个“关闭”(或添加一种方法来确定关闭需要是下一个操作)。