macOS如何实现脚本先退出后执行一次性定时重启任务
macOS 脚本触发延时重启且脚本提前退出的实现方案
方案1:后台运行shutdown命令(最简方案)
直接将shutdown命令丢到后台脱离当前会话,执行命令后会立即返回,不会阻塞脚本运行:
# 1分钟后重启,命令立即返回,不阻塞当前脚本 nohup sudo shutdown -r +1 > /dev/null 2>&1 & # 此处可以继续执行你需要的其他逻辑,比如上报状态给中央服务器 # 所有逻辑执行完成后脚本直接退出即可,重启会在1分钟后自动触发
- 说明:
nohup保证命令不会因为当前终端会话关闭而终止,进程会被系统launchd接管- 输出重定向到
/dev/null避免生成多余的nohup日志文件 - 末尾的
&将命令丢到后台运行,当前脚本不需要等待命令执行完成 - 系统会自动给所有登录的终端用户发送重启提醒,若需要额外给图形界面用户发通知,可补充执行:
osascript -e 'display notification "系统将在1分钟后重启,请保存当前工作" with title "系统重启提醒"'- 需要取消重启时,执行
sudo shutdown -c即可。
方案2:使用launchd提交一次性任务(兼容受限环境)
如果环境中禁用了nohup/后台进程,可通过launchd的一次性任务调度实现,不需要配置永久周期规则:
# 提交一次性任务,延迟60秒执行重启命令 launchctl submit -l com.temp.restart -p /sbin/shutdown -o -r -o +1 # 脚本后续逻辑正常执行,完成后直接退出即可
- 说明:该任务由系统launchd守护进程托管,不会受当前脚本/终端会话的生命周期影响,执行完成后自动清理,不会残留定时规则。
内容的提问来源于stack exchange,提问作者seagull
相关产品推荐
相关产品推荐

