我在注销后如何在Unix上运行Perl脚本?

时间:2011-03-04 07:12:15

标签: scheduling nohup keep-alive at-job

我有一个需要花费大量时间才能完成的脚本。

我宁愿退出并稍后检索其输出,而不是等待它完成。

我试过了;

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

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

我还验证了psat -l实际存在的进程,具体取决于我使用的调度语法。

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

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

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

<小时/> 修改:
我无法使用screendisown - 它们未安装在我的HP Unix设置中,我无法安装它们

5 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:5)

If you want to keep a process running after you log out:

disown -h <pid>

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

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

不要忘记记录你的工作,否则当你退出时就会被杀死。

答案 2 :(得分:4)

这只是猜测,但我在ssh和nohup的某些版本中看到过:如果你已经使用ssh登录,那么你可能需要重定向stdout,stderr stdin以避免在退出时挂起会话。 (其中一个可能仍然附在终端上。)我会尝试:

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

在后台运行您的命令。

/path/to/./thescript.pl &

获取后台工作的点击次数

   jobs

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

disown <jobid>

即使您已退出,所有不相关的流程也应继续运行。