2

我正在尝试在我的 Debian Wheezy 系统上创建服务。

尝试使用 start-stop-daemon 运行 autossh 时,pidfile 中包含的 pid 与 autossh 进程不匹配。

$ AUTOSSH_PIDFILE=/var/run/padstunnel.pid
$ sudo start-stop-daemon --make-pidfile --background --name mytunnel --start --pidfile /var/run/mytunnel.pid --exec /usr/lib/autossh/autossh -- -M 0 -p 22 user@server -f -T -N -R 31022:localhost:31222
$ ps -elf |grep autossh
1 S root       447     1  0  80   0 -   329 pause  19:07 ?        00:00:00 /usr/lib/autossh/autossh -M 0 -p 22 ...
$ cat /var/run/mytunnel.pid
446

此行为可防止停止autossh使用 start-stop-daemon 或使用 pidfile 中的 pid 杀死它。

这种行为有什么理由吗?

如何解决它并使 autossh 的 pid 与 pidfile 匹配?

4

1 回答 1

3

我找到的解决方案受此答案的启发。

实际上,该AUTOSSH_PIDFILE变量不能被使用autossh(因为 start-stop-daemon 在不同的环境中运行)。

所以解决方法是使用:

$ sudo start-stop-daemon --background --name mytunnel --start --exec /usr/bin/env AUTOSSH_PIDFILE="/var/run/mytunnel.pid" /usr/lib/autossh/autossh -- -M 0 -p 22 user@server -f -T -N -R 31022:localhost:31222
  • /usr/bin/env AUTOSSH_PIDFILE="/var/run/mytunnel.pid"正确定义必要的环境变量
  • --make-pidfile并且--pidfile不再需要start-stop-daemon
  • sudo start-stop-daemon --pidfile /var/run/mytunnel.pid --stop现在可以杀死autossh
  • --background选项使ssh's 是-f可选的(使用-f或不使用不会改变任何东西--background

这种行为的原因对我来说并不完全清楚。但是,当它看不到变量时,它似乎会autossh自动创建几个进程来正确处理实例。sshAUTOSSH_PIDFILE

编辑:

从服务初始化脚本(在 /etc/init.d/servicename 中)使用它时,必须修改语法:

sudo start-stop-daemon --background --name mytunnel --start --exec /usr/bin/env -- AUTOSSH_PIDFILE="/var/run/mytunnel.pid" /usr/lib/autossh/autossh -M 0 -p 22 user@server -f -T -N -R 31022:localhost:31222

请注意,--它必须紧跟在 /usr/bin/env 命令之后(它在命令行的 /usr/lib/autossh/autossh 之后)。

于 2015-12-06T17:14:27.323 回答