如何在不使用crontab的情况下在后台连续运行脚本。该脚本应该在我注销后运行,如果在系统重启后没有启动,则可以接受。我是unix新手。
答案 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)系统重启