如何在不使用crontab的情况下在后台连续运行unix脚本。

时间:2012-05-04 08:19:42

标签: linux unix solaris

如何在不使用crontab的情况下在后台连续运行脚本。该脚本应该在我注销后运行,如果在系统重启后没有启动,则可以接受。我是unix新手。

5 个答案:

答案 0 :(得分:4)

有几种方法可以做到这一点,但最好的方法是使用screen。这使您可以创建一个永久存在于计算机上的会话,您只需重新连接即可检查长时间运行过程的进度。

如果您不想使用screen,可以使用nohup,这样您就可以执行以下任务:

nohup mytask &

您的任务现在将在后台运行并在注销后继续存在,但与screen不同,无法再次控制它。

答案 1 :(得分:2)

正如其他人之前提到的那样,你需要使用nohup来阻止进程获取挂起信号(因此不会挂起)。

但是,如果你在后台开始这个过程,就像

一样
prompt> nohup process &

的缺点是不允许您输入启动流程所需的任何数据。这可能是密码/凭证或流程所需的其他输入。

如果您有此要求,请在没有“&”的情况下启动它最后,输入您的输入,然后按Ctrl-Z使进程进入休眠状态。要将其发送到后台,请在提示符下键入“bg”,然后按Enter键。

prompt> nohup process
Enter password:
(Now press Ctrl-Z)
[1]+  Stopped                 process
prompt> bg
[1]+ process &

现在,即使您注销,该过程仍将继续在后台运行。

或者,如果您使用的是bash或zsh,如果您没有以nohup开始进程,并且无法启动并重新启动它,则可以使用内置的disown命令。首先暂停和后台进程。然后停止挂断信号到达它。

prompt> process
Enter password:
(Now press Ctrl-Z)
[1]+  Stopped                 process
prompt> bg
[1]+ process &
prompt> disown -h

注意:如果您正在运行其他后台作业,则需要提供jobspec以仅取消此特定作业。

prompt> disown -h %1

如果您在暂停并将流程发送到后台时看到[2]而不是[1],则会改为disown -h %2

答案 2 :(得分:1)

除了在后台启动它,如上所述,您可能需要使用'nohup'。这意味着即使您关闭终端,它也会继续运行。

nohup ./abc.sh& amp;

答案 3 :(得分:1)

if [ "x$1" != "x--" ]; then
$0 -- 1> /dev/null 2> /dev/null &
exit 0
fi

这是您可以将脚本作为守护程序运行的方法。首先你的脚本(父亲)将创建一个他自己(一个孩子)的副本,所以它被认为是父亲的过程。然后父亲在孩子还在奔跑时自杀。猜猜你做这样的事情会发生什么?子进程附加到init进程。因此,即使您注销,脚本仍将运行。 你甚至可以在没有“&”的情况下启动它。操作员,因为你启动了一个毫秒后被杀死的父亲 您可以像计算机上运行的任何程序一样再次控制它。

顺便说一下,它不是一个真正的“守护进程”程序,它只是一种模仿。你不能只是在启动时启动它(我的意思是真的是BOOT而不是登录)如果你想在登录时启动它,很简单就把它放在.xinitrc

这个解决方案的主要优点是你的脚本不依赖于任何其他程序,例如“nohup”,我认为这真的很糟糕。

问候
PS:如果你想了解上述命令的一些信息,请问我。这只是一个“参数”的事情。

答案 4 :(得分:-1)

使用&在后台启动它运营商,例如。

./ abc.sh& amp;这将持续到(a)执行完成或(b)你杀了它或(c)系统重启