我如何在不使用crontab的情况下连续运行脚本。 脚本应该运行,即使我注销后,如果它没有启动系统重新启动后可以接受。我是新来的unix。
有几种方法可以做到这一点,但最简单的方法是使用屏幕 。 这可以让你创建一个在机器上永久存在的会话,你可以简单的重新连接来检查你长时间运行的进程的进度。
如果你不想使用screen
你可以使用nohup
这允许你运行一个任务,如:
nohup mytask &
你的任务现在将在后台运行,并会在注销后生存下来,但是与screen
不同的是,没有办法再次控制它。
以及在后台启动它,如上所述,您可能需要使用“nohup”。 这意味着即使您关闭终端,它也会继续运行。
nohup ./abc.sh&
if [ "x$1" != "x--" ]; then $0 -- 1> /dev/null 2> /dev/null & exit 0 fi
这就是你如何运行一个脚本作为守护进程 。 首先你的脚本(父亲)将创建一个自己(一个孩子)的副本,所以它被视为父亲的过程。 然后父亲在孩子还在跑步的时候自杀。 猜猜你做这样的事情会发生什么? 孩子被附加到init进程。 所以即使你注销,脚本仍然会运行。 你甚至可以在没有“&”运算符的情况下启动它,因为你启动了一个毫秒后被杀的父进程。
您可以像在计算机上运行的任何程序一样再次对其进行控制。
顺便说它不是一个真正的“守护进程”程序,它只是一种模拟。 你不能只在启动时启动它(我的意思是真正的BOOT,而不是登录),如果你想在你登录时启动它,很简单,把它放在你的.xinitrc
这个解决方案的主要优点是你的脚本不依赖于任何其他的程序,比如“nohup”,我认为这真的很糟糕。
问候
PS:如果你想获得关于上面的命令的一些信息,请问我。 这只是一个“参数”的事情。
正如其他人之前提到的,你需要使用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
而不是[1],如果你看到[2],当你暂停并发送进程到后台时,你可以说disown -h %2
。
例如,使用&运算符在后台启动它
./abc.sh&这将继续,直到(a)执行完成或(b)你杀死它或(c)系统重启