我编写了几个 upstart 脚本,用于为多个用户启动transmission-daemon
。脚本如下:
start on (local-filesystems and net-device-up IFACE=eth0 and runlevel [235])
stop on runlevel [016]
kill timeout 50
respawn
env USER=user
env PIDFILE=/var/run/transmission-user.pid
script
DAEMON=$(which transmission-daemon) || exit 0
CONFIGDIR=/home/$USER/.config/transmission-daemon
exec start-stop-daemon --start --quiet --chuid $USER --pidfile $PIDFILE --make-pidfile --exec $DAEMON -- -f --config-dir $CONFIGDIR --logfile $CONFIGDIR/daemon.log
end script
post-stop exec rm -f $PIDFILE
我会将其转换为:
env USER=user
env PIDFILE=/var/run/transmission-user.pid
对此:
env USER=user
env PIDFILE=/var/run/transmission-$USER.pid
但是 upstart 不允许。如果我将这些行移到脚本部分,我就可以做到这一点:
script
USER=user
PIDFILE=/var/run/transmission-$USER.pid
...
end script
但在这种情况下,停止后部分的 PIDFILE 为空。
有什么办法可以解决此问题吗?
答案1
这是 upstart 中的一个相当老的错误:
https://bugs.launchpad.net/upstart/+bug/328366
为了在停止后和脚本中获取变量……您只需两次设置它即可解决该错误。