Daemonised Bash脚本仅在满足条件时停止或重新启动

时间:2018-01-22 02:37:03

标签: linux bash daemon

我使用this repository中的示例来妖魔化Ubuntu 16.04中的bash脚本。

守护进程在启动时开始,并在Linux环境中按预期运行,其命令如下:

service EXAMPLE_SERVICE start
service EXAMPLE_SERVICE stop
service EXAMPLE_SERVICE restart 

该脚本用于处理事件队列中的事件 - 下面的示例应该给出一个想法,尽管脚本本身更复杂。

#!/bin/bash
while true
do
    (php -f cli.php bash:v1:issueEvents)
    (php -f cli.php bash:v1:processSomeOrderAction)
    (php -f cli.php bash:v1:processSomeEquiryAction)
    sleep 10
done

我想要做的是确保守护进程只能在睡眠状态期间退出。设置一个布尔变量SAFE_TO_EXIT很简单,但是有没有办法确保在重启之前手动重启或停止进程之前满足这个条件?

1 个答案:

答案 0 :(得分:3)

捕获用于请求关闭的信号,并以您喜欢的方式处理它。

请注意,某些信号无法捕获 - 如果守护程序脚本使用SIGKILL而不是SIGTERM,则无法控制关闭的工作方式。但是,如果它使用SIGTERM,您可以按如下方式处理它:

#!/usr/bin/env bash

trap 'stop=1' TERM

while true; do
    php -f cli.php bash:v1:issueEvents
    php -f cli.php bash:v1:processSomeOrderAction
    php -f cli.php bash:v1:processSomeEquiryAction
    [[ $stop ]] && break
    sleep 10
    [[ $stop ]] && break
done