GNU:延迟作业队列

GNU:延迟作业队列

有没有一种简单的方法可以让我在未登录时将 shell 命令添加到要在系统上运行的作业列表中?

例如:

我通过 SSH 连接到我的系统,决定稍后阅读一本电子书,但它的格式错误。我将使用 Calibre 来转换它,但这会占用 CPU 很长时间。不过我并不着急,所以我想告诉我的系统在我退出 SSH 会话后立即启动 Calibre 转换操作(只需运行 shell 命令)。然后当我再次通过 SSH 登录时,我转换后的书就会在等着我。

答案1

一个简单但可能不方便的方法是使用以下命令启动命令诺哈普在注销之前将其与终端分离。

nohup mycommand &
logout

nohup.out该命令的任何输出都将发送到当前目录中的文件。

通常在里面运行命令会更方便屏幕或者多路复用器。这两个程序都提供了终端中的终端,您可以将会话与当前终端分离并稍后重新连接到它。

screen
# inside the screen session
sleep 60; mycommand
# press Ctrl+A D to detach from the session
# now back in the original shell
logout

然后后来:

screen -rd
# inside the screen session, you can see how your command is doing
exit

另一种可能性是稍后安排工作。这at命令允许您在特定时间安排作业(它是定期计划任务的 cron 的一次性挂件)。如果该命令产生输出,它将被邮寄给您(假设您正在运行本地邮件)。

echo 'mycommand' | at 23:05

答案2

我只是开始一个screen(现在访问为“ byobu”)或tmux会话。做你的事情,开始这个过程,然后断开连接。该作业将继续运行,当您准备好时,您可以重新连接并返回会话。我已经运行了几个月的屏幕会话,并且可以预先配置它们,以便

答案3

使用该at命令提交批处理作业进行处理。不过,它不会在运行之前等待您注销,因此,当您提交作业时,只需确保它已nice编辑即可。

相关内容