我使用一个init脚本来运行一个简单的进程,该进程从以下命令开始:
start-stop-daemon --start --quiet --chuid $DAEMONUSER \
--make-pidfile --pidfile $PIDFILE --background \
--exec $DAEMON $DAEMON_ARGS
名为$DAEMON的进程通常将日志信息打印到其标准输出。据我所知,这些数据没有存储在任何地方。
我想要将$DAEMON的标准输出写入或附加到某个文件中。
我所知道的惟一解决方案是告诉启动-停止-守护进程调用$DAEMON脚本,而不是直接调用stop;然后该脚本调用stop并写入日志文件。但这需要一个额外的脚本,就像修改守护进程本身一样,这似乎不是解决这种常见任务的错误方法。
发布于 2014-01-10 04:00:09
对ypocat的回答进行扩展,因为它不让我发表评论:
start-stop-daemon --start --quiet --chuid $DAEMONUSER \
--make-pidfile --pidfile $PIDFILE --background \
--startas /bin/bash -- -c "exec $DAEMON $DAEMON_ARGS > /var/log/some.log 2>&1"
使用exec
运行守护进程允许stop正确地停止子进程,而不仅仅是bash父进程。
使用--startas
而不是--exec
可以确保进程能够被其pid正确检测到,并且如果多次调用start,也不会错误地启动守护进程的多个实例。否则,start-stop-daemon将查找/bin/bash进程并忽略运行该守护进程的实际子进程。
https://stackoverflow.com/questions/8251933
复制相似问题