奇怪的启动-停止守护进程行为?

奇怪的启动-停止守护进程行为?

我有以下脚本:

#!/usr/bin/python3

import sys
for s in sys.argv:
    print(s)

现在我执行:

sudo start-stop-daemon --start --pidfile /var/run/test.pid --make-pidfile /var/run/test.pid --user max --exec /home/max/Dokumente/test.py

输出为:

/home/max/Dokumente/test.py
/var/run/test.pid

我的问题是:为什么它使用 pidfile 作为我的脚本的参数,有没有办法可以阻止这种情况?

我正在运行 Ubuntu 13.04 64 位。

答案1

我应该更仔细地阅读手册页。它--make-pidfile不带参数,它是一个标志:

   -m, --make-pidfile
          Used when starting a program that does not  create  its  own  pid  file.  This  option  will  make
          start-stop-daemon  create the file referenced with --pidfile and place the pid into it just before
          executing the process. Note, the file will not be removed when stopping the program.   NOTE:  This
          feature  may  not  work  in all cases. Most notably when the program being executed forks from its
          main process. Because of this, it is usually only  useful  when  combined  with  the  --background
          option.

因此,如果命令运行如下

$ sudo start-stop-daemon --start --pidfile /var/run/test.pid \ 
 --make-pidfile /var/run/test.pid --user max --exec /bin/echo

第二次提到的/var/run/test.pid未被任何选项捕获,因此作为参数传递给 调用的可执行文件--exec。这就是为什么当你让脚本打印其参数时它会被打印出来。解决方案就是不给 任何参数--make-pidfile

$ sudo start-stop-daemon --start --pidfile /var/run/test.pid \ 
 --make-pidfile --user max --exec /bin/echo

感谢楼主自己解决了但已经接受了我的回答。

相关内容