如何在启动时使upstart执行守护程序应用程序(linux)

时间:2014-01-08 13:44:56

标签: daemon startup init spawn upstart

在我的Linux mint(Olivia)系统中,我在主目录中放置了一个可执行的shell脚本 在那个shell脚本(daemonize_me.sh)里面有一个调用daemonize应用程序的命令, daemonize应用程序任务是作为守护程序执行作为参数传递给它的应用程序。

daemonize.sh内部如下

#!/bin/bash
REG_WRK_DIR="/home/sina/`Desktop`/CollectedDaemons/regulator_workdir/"
REG_LOG_DIR=$REG_WRK_DIR"log/"
REG_EXEC_FILE=$REG_WRK_DIR"QtProjectWork"
REG_STDERR_LOG_FILE=$REG_WRK_DIR"log/error.log"
REG_STDOUT_LOG_FILE=$REG_WRK_DIR"log/output.log"
REG_PID_FILE=$REG_WRK_DIR"reg_daemon.pid"
REG_LOCK_FILE=$REG_WRK_DIR"lock_pid.lock"

myExec="daemonize -a -c "${REG_WRK_DIR}" -e "${REG_STDERR_LOG_FILE}" -o "${REG_STDOUT_LOG_FILE}" -p "${REG_PID_FILE}" -l "${REG_LOCK_FILE}" "${REG_EXEC_FILE}
echo $myExec
eval $myExec
result=$?
if [ $result -eq 0 ];then
    result=`echo -e "Daemon started at :">>${REG_STDERR_LOG_FILE};date >> ${REG_STDERR_LOG_FILE}`
        echo -e "Daemon has started"
        echo -e $result
else
        echo -e "Daemon did not start (may be it has already started!)"
        echo -e $result
fi

当我以用户身份运行它时,这个bash脚本在终端中工作正常,运行后返回shell提示符,我可以在top / htop中看到进程仍然在内存中运行,即使我关闭终端或.... (所以没有挂断信号,....确实会杀死进程) 虽然我将在守护程序启动后获得输出,错误日志文件,锁定和PID编号。

挑战是,我必须在系统启动时运行此脚本(daemonize_me.sh)。 所以我尝试使用upstart(已经安装)来执行daemonizeme.sh

我添加了以下配置(regulator.conf)文件,其中包含以下内容:

respawn
script      
    export HOME="/home/sina/Desktop/CollectedDaemons/regulator_workdir"
    echo -e "Going to start regulating Daemon" > /home/sina/Desktop/CollectedDaemons/regulator_workdir/log/upstart.info
    exec sudo -u /home/sina/Desktop/CollectedDaemons/daemonize_me.sh
end script

在/etc/init/regulator.conf中保存配置文件并将文件权限修复为 -rw-r - r-- 1 root root 685 jan 8 14:35 regulator.conf

什么都没有开始!我没有通过echo创建文件,没有守护进程,......什么都没有?

实际上deamonize_me.sh及其目录和子目录都具有0755权限。 所以有什么问题,我必须使用monit监视我的守护进程,如果upstart不能正常工作,我必须将它添加到init.d,我不知道如何。

提前致谢

1 个答案:

答案 0 :(得分:0)

如果要在启动时启动守护程序,则需要在Upstart脚本中使用start on节。要手动启动,请尝试service regulator start