【发布时间】:2014-01-26 15:50:13
【问题描述】:
在我的 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:35ulator.conf
什么都没有开始!我没有通过回显创建文件,没有守护进程,......什么都没有?
实际上deamonize_me.sh及其目录和子目录都拥有0755权限。 那么有什么问题,我必须使用 monit 来监控我的守护进程,如果 upstart 不能正常工作,我必须将它添加到我不知道如何的 init.d 中。
提前致谢
【问题讨论】:
标签: daemon startup init spawn upstart