我有一个关于 init.d 脚本的问题。
目前我有一个启动脚本,它启动自定义守护进程,如下所示:
sudo -u "$user" $cmd >> "$stdout_log" 2>> "$stderr_log" &
echo $! > "$pid_file"
只要我以 root 身份运行 init 脚本,守护进程就可以工作。
守护进程需要访问权限来创建屏幕,但由于 CentOS 6.7,我需要使用一种解决方法来允许非 root 用户通过使用命令“脚本”来运行屏幕(如何以非 root 用户身份启动“屏幕”会话),我最终得到以下行,它以非 root 用户身份完美启动守护进程。
sudo -u "$user" bash -c "script -c \"$cmd\"" >> "$stdout_log" 2>> "$stderr_log" &
当我尝试将进程的 pid 回显并通过管道传输到 pid 文件时,问题就开始了,因为它给出了“脚本”命令的 pid,而不是守护进程本身的 pid。
有谁有获取守护进程 pid 的建议或解决方案吗?
答案1
怎么样
sudo -u "$user" bash -c "script -c \"$cmd& echo $! > \"$pid_file\"\"" >> "$stdout_log" 2>> "$stderr_log" &