每天在屏幕上自动重启命令行进程

我有一个队列脚本,每秒从数据库中find新的作业,并处理它们。 有时在10个小时内什么都不做,有时在3分钟内就能得到1000个新的工作。 队列工作正常,主要是。

它需要重新启动。 (我不完全确定为什么,我认为其他服务的工作是不喜欢连接打开很长时间,重新启动队列,重置所有连接,也许这不是原因)。有时候,队列脚本只是死。 也许记忆错误,我不能指出它。

有两种方式重新启动,我都很好,(但它必须是自动的):

  1. 每24小时显式重启一次: ctrl C + ./queue.sh
  2. 等到它死了,然后重新开始

我不确定…队列在screen运行,所以我可以按照输出时,我想。 一个命令如何能够监听另一个命令来完成并重启它,而不是一个守护进程

我无法安装任何东西。 这是一个糟糕的Redhat服务器,我没有像样的pipe理员访问。

我曾经想过创build一个每24小时发生一次的cronjob,并在24小时后自行终止,但这听起来很错误……我不能使用cronjob作为队列,因为新任务必须立即执行。

您可以将./queue.sh作为监视器脚本的子项运行,如下所示:

 1. #!/bin/bash 2. while true; do 3. ./queue.sh & q_pid="${!}" 4. ( sleep 86400 ; kill "${q_pid}" ) & s_pid="${!}" 5. wait "${q_pid}" 6. kill "${s_pid}" 7. wait "${s_pid}" 8. done 

怎么运行的:

  1. 监视器脚本在后台(第3行)运行一个./queue.sh进程,并且睡眠一天并杀死./queue.sh (第4行)的子./queue.sh 。 然后等待./queue.sh完成(第5行)。

  2. 如果./queue.sh过早结束,监视器会终止sleep过程(第6行),因此将来不会杀死具有相同PID的无辜进程。 第7行的wait命令可以防止sleep过程成为僵尸。

  3. 如果./queue.sh执行超过24小时,则在sleep过程结束时(第4行)强制结束。

queue.sh必须运行某种进程。 你可以修改它,使其循环 – 像这样(不需要有效的bash下面,只是一些伪代码):

  do processqueue loop 

然后写一个cronjob,在1AM或任何你喜欢的时候杀死processqueue进程。 进程将会死亡,循环会重新启动它。