【问题标题】:Continue script after reboot with crontab in a terminal [duplicate]在终端中使用 crontab 重新启动后继续执行脚本 [重复]
【发布时间】:2019-07-10 20:44:13
【问题描述】:

我有一个 bash 脚本来在 linux 中安装一些东西。安装脚本需要以 root 身份运行。安装过程会重新启动两次,并在每次重新启动后继续。

我设法操纵 crontab 来添加/删除作业以使其正常工作。但是,如果安装脚本已完成,我希望通知用户,以便他/她可以等到最后一次重新启动完成。

我能想到的唯一解决方案是在打开的终端中运行 crontab 作业,这样用户就可以看到安装仍在进行中。

问题 1:这是一个好的解决方案吗?有什么选择吗?

问题 2:如果解决方案很好,我如何确保终端已打开并且 crontab 作业在该终端中运行?

【问题讨论】:

  • 用户希望如何被“告知”?文本消息、GUI 弹出窗口、终端中的消息?继续安装时系统是否引导至多用户?继续安装时 X 服务器是否正在运行?需要通知的用户是坐在控制台还是远程?
  • 需要重新启动 - 更不用说两次了! - 似乎很不Unixy。你真的确定没有办法避免至少一次重启吗?您实际上想解决哪个问题? (用一个通用的内核替换一个以某种方式受到损害的内核,然后安装一个不太通用的内核来替换它,这几乎是我能想象到的唯一一种甚至远程有意义的情况。除非它真的没有。)
  • @tripleee 我正在树莓上安装软件。我首先对操作系统进行升级/更新。我安装golang。然后我使用 go install ./... 安装软件,这可以在不重新启动的情况下完成吗?
  • @MFnx 绝对不需要任何重新启动,这是经典的,最坏的情况是您需要重新加载终端环境。
  • 如果升级内核,最终将需要重新启动。但是,让安装用户在方便的时候手动执行是一个经过充分验证的标准解决方案。也许在安装结束时显示一条消息。从cron 运行这些都没有意义。

标签: bash shell cron root


【解决方案1】:

Cron 作业在没有任何附加终端的情况下执行。您必须在您的 cron 脚本中创建一个,并将脚本命令的所有输出重定向到它。也许最简单的选择是将脚本的输出重定向到日志文件,然后打开一个只执行tail -f <logfile> 的终端。然后,您可以在脚本完成后终止终端。如果您使用的是 xterm(例如),您可以使用 xterm -e "tail -f logfile.txt"

【讨论】:

  • 或者干脆不要尝试将cron 用于显然不是定期安排的工作。只需在终端中运行即可。
  • 当然这里不需要cron。如果您只想在重新启动时运行一次,您还可以将其添加到 /etc/init.d(并将符号链接到适当的运行级别),并在运行后将其删除。但无论哪种情况,OP 都希望该过程对用户可见。
猜你喜欢
  • 2019-01-04
  • 2018-04-17
  • 1970-01-01
  • 1970-01-01
  • 2013-02-16
  • 2019-07-30
  • 2020-03-21
  • 2014-03-15
  • 2018-06-11
相关资源
最近更新 更多