Cron杀死了催生的进程

时间:2010-02-25 16:43:55

标签: cron solaris

我有一个cron作业设置,将启动我的脚本。

此脚本的目的是终止当前正在运行的进程,并启动此进程的新版本(CHECKDB)。 CHECKDB需要一直运行,所以我们有一个start_checkdb脚本,它基本上是一个运行CHECKDB的无限循环;如果它崩溃,它会停留在循环中,再次启动它。 [是的,我意识到这不是最好的做法,但这不是什么意思]

我的脚本将由cron调用而没有问题,然后它会毫无问题地终止CHECKDB。据我所知,调用子脚本会启动CHECKDB备份,但每次在cron运行后检查ps时,进程都不会运行。如果我在命令行上手动运行脚本,在任何shell下,它都没有问题:杀死CHECKDB和start_checkdb,启动start_checkdb启动CHECKDB。

然而出于某种原因,当cron做到这一点时,这个过程永远不会在之后运行。它会杀死现场的,或者不启动它,或者启动它并杀死它。

有可能当cron到达父进程的末尾时,它会杀死被调用的子进程吗?

我不知道它是否有所作为,但这是在Solaris 8上。

2 个答案:

答案 0 :(得分:0)

启动checkdb时,您可能会考虑在cron脚本中使用nohup。像'nohup command&'这样的东西在发射过程之外发射你想要的东西是正常的方式。

答案 1 :(得分:0)

您能澄清一下您对此安排的描述吗?听起来,在正常情况下,start_checkdb和CHECKDB都在运行。 cron作业应该杀死CHECKDB,而已经运行的start_checkdb副本应该重新启动它?或者cron作业是否会杀死这两个进程然后重新启动start_checkdb?运行cron作业后,缺少哪个进程 - CHECKDB,start_checkdb或两者都有?

话虽如此,从命令行开始工作但从cron失败的最常见原因是:

  • 依赖于正确的命令PATH(或其他一些环境变量)
  • 从正确的目录运行的依赖性
  • 从tty开始依赖。