我有一个cron作业设置,将启动我的脚本。
此脚本的目的是终止当前正在运行的进程,并启动此进程的新版本(CHECKDB)。 CHECKDB需要一直运行,所以我们有一个start_checkdb脚本,它基本上是一个运行CHECKDB的无限循环;如果它崩溃,它会停留在循环中,再次启动它。 [是的,我意识到这不是最好的做法,但这不是什么意思]
我的脚本将由cron调用而没有问题,然后它会毫无问题地终止CHECKDB。据我所知,调用子脚本会启动CHECKDB备份,但每次在cron运行后检查ps时,进程都不会运行。如果我在命令行上手动运行脚本,在任何shell下,它都没有问题:杀死CHECKDB和start_checkdb,启动start_checkdb启动CHECKDB。
然而出于某种原因,当cron做到这一点时,这个过程永远不会在之后运行。它会杀死现场的,或者不启动它,或者启动它并杀死它。
有可能当cron到达父进程的末尾时,它会杀死被调用的子进程吗?
我不知道它是否有所作为,但这是在Solaris 8上。
答案 0 :(得分:0)
启动checkdb时,您可能会考虑在cron脚本中使用nohup。像'nohup command&'这样的东西在发射过程之外发射你想要的东西是正常的方式。
答案 1 :(得分:0)
您能澄清一下您对此安排的描述吗?听起来,在正常情况下,start_checkdb和CHECKDB都在运行。 cron作业应该杀死CHECKDB,而已经运行的start_checkdb副本应该重新启动它?或者cron作业是否会杀死这两个进程然后重新启动start_checkdb?运行cron作业后,缺少哪个进程 - CHECKDB,start_checkdb或两者都有?
话虽如此,从命令行开始工作但从cron失败的最常见原因是: