2011-03-04 57 views
1

我有一个需要花费很多时间才能完成的脚本。如何在注销后让Perl脚本在Unix上运行?

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

我试过了;

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

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

我也已经验证的过程实际上psat -l取决于哪个调度语法我用存在。

当我退出壳体时,这两个过程都会死亡。关闭连接时,有没有办法阻止脚本终止?

我们在这里有crons,它们已经建立并正在正常工作,但我想使用atnohup作为一次性脚本。

我的语法有什么问题吗?有没有其他方法可以产生理想的结果?


编辑:
我不能使用 screendisown - 他们不是安装在我的HP UNIX安装,我不是在位置安装它们要么

回答

4

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

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

(这不再是我目前的ssh和nohup的版本的情况下 - 后者将它们导向它,如果它检测到任何的附加到终端 - 但您可能会使用不同的版本。)

+0

感谢信息标记......该脚本将所有输出导入一个'.csv'文件。我不知道我是否需要重定向到stdout – CheeseConQueso

+0

实际上我会重写打印语句,以便它们打印到屏幕上,然后尝试您的建议 – CheeseConQueso

+1

好!它的自主性,就像我喜欢它的方式......我只是希望它不会自我意识 – CheeseConQueso

11

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

+2

你不能在屏幕上出错。花几分钟时间学习并熟悉它。这将是值得你的时间下线。 – holygeek

+0

由于很多原因,GNU'screen'很棒,包括这个。绝对推荐它。 –

+0

我不认为我有屏幕 - 没有人为它的文件,即时通讯没有安装它,除非它可以在本地执行。感谢您的阅读材料,虽然 – CheeseConQueso

1

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

+0

感谢您的信息...脚本,本质上,指示所有输出到'.csv'文件,所以它并不重要(据我所知)重定向到其他任何东西 – CheeseConQueso

1

在后台运行您的命令。

/path/to/./thescript.pl & 

为了让您的后台作业

jobs 

现在你可以选择任何断绝关系上面作业的双床,其作业ID。

disown <jobid> 

即使退出后,所有不知名的进程仍应继续运行。

+0

绝对有帮助,但是有没有其他方法可以“解除”过程? – CheeseConQueso

5

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

disown -h <pid>

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

首先,停止与控制-Z你的工作,得到ps的PID(或使用echo $!),使用bg将其发送到后台,再使用disown与-h标志。

不要忘记背景你的工作,否则它会在你注销时被杀死。

+0

我没有'disown'安装...谢谢你的提示 – CheeseConQueso

相关问题