1

我有一个脚本需要很长时间才能完成。

而不是等待它完成,我宁愿只是注销并稍后检索它的输出。

我试过了;

at -m -t 03030205 -f /path/to/./thescript.pl

nohup /path/to/./thescript.pl &

而且我还验证了这些进程实际上存在于psat -l取决于我使用的调度语法。

当我退出 shell 时,这两个进程都会死掉。有没有办法在我关闭连接时阻止脚本终止?

我们这里有 crons,它们已设置好并且工作正常,但我想使用atnohup用于一次性脚本。

我的语法有问题吗?有没有其他方法可以产生预期的结果?


编辑:
我不能使用screendisown- 它们没有安装在我的 HP Unix 设置中,我也无法安装它们

4

5 回答 5

12

使用屏幕。它会创建一个终端,当您注销时该终端会继续运行。当您重新登录时,您可以切换回它。

于 2011-03-04T07:19:56.823 回答
5

如果要在注销后保持进程运行:

disown -h <pid>

是一个有用的 bash 内置。与 不同的nohup是,您可以disown在已经运行的进程上运行。

首先,使用 control-Z 停止您的工作,从ps(或使用echo $!)获取 pid,使用bg将其发送到后台,然后disown与 -h 标志一起使用。

不要忘记后台你的工作,否则当你注销时它会被杀死。

于 2011-03-04T07:38:13.730 回答
4

这只是一个猜测,但我在某些版本的 ssh 和 nohup 中看到了一些情况:如果您使用 ssh 登录,那么您可能需要重定向 stdout、stderrstdin 以避免在您退出时会话挂起. (其中一个可能仍连接到终端。)我会尝试:

nohup /path/to/./thescript.pl > whatever.stdout 2> whatever.stderr < /dev/null &

(我当前版本的 ssh 和 nohup 不再是这种情况 - 如果后者检测到任何连接到终端,则会重定向它们 - 但您可能使用不同的版本。)

于 2011-03-04T07:25:46.720 回答
1

nohup 的语法看起来不错,但您的帐户可能不允许进程在注销后运行。此外,尝试将 stdout/stderr 重定向到日志文件或 /dev/null。

于 2011-03-04T07:21:01.010 回答
1

在后台运行您的命令。

/path/to/./thescript.pl &

了解您的后台工作

   jobs

现在,您可以选择性地拒绝上述任何工作及其 jobid。

disown <jobid>

即使在您注销后,所有被取消的进程也应该继续运行。

于 2011-03-04T07:29:53.697 回答