通过 upstart 脚本中的环境变量将端口传递给 calibre-server

通过 upstart 脚本中的环境变量将端口传递给 calibre-server

我正在尝试编写一个新贵脚本calibre 服务器

我可以使用除--port之外的环境变量添加我需要的所有参数。

description "Calibre (ebook manager) content server"

start on runlevel [2345]
stop on runlevel [^2345]

respawn

env USER='test'
env PASSWORD='test'
env LIBRARY_PATH='/var/lib/calibre'
env NAME='calibre-server'
env DAEMON='/usr/bin/$NAME'
env MAX_COVER='300x400'
env PORT='80'

env ARGS='--auto-reload --max-cover $MAX_COVER --port $PORT'

exec /usr/bin/calibre-server --with-library $LIBRARY_PATH $ARGS --username $USER --password $PASSWORD

使用上述脚本,如果我运行start calibre-server它,它将无法启动,并且/var/log/upstart/calibre-server.log我得到 calibre-server:错误:选项--port:无效的整数值:u'$PORT'

删除引号来更改声明并env PORT=80没有帮助。

将 ARGS 更改为env ARGS='--auto-reload --max-cover $MAX_COVER --port 80'完美,但并不理想,因为我想保持所有变量始终单独声明。

非常感谢您的帮助。这也是我编写的第一个新贵脚本,所以如果有什么明显错误的地方,请指出来。

我正在使用新安装的 Ubuntu 14.04。

答案1

我不知道 MAX_COVER 是如何工作的,但变量不会在环境节中扩展。例如,以以下作业为例:

env US=yhej
env SU="$US"

exec echo $US $SU

如果变量扩展,则会输出:

yhej yhej

但相反,它输出:

yhej $US

您可以修改您的作业以使用脚本部分,并且变量将被扩展:

description "Calibre (ebook manager) content server"

start on runlevel [2345]
stop on runlevel [^2345]

respawn

env USER='test'
env PASSWORD='test'
env LIBRARY_PATH='/var/lib/calibre'
env MAX_COVER='300x400'
env PORT='80'

script
    exec /usr/bin/calibre-server --with-library $LIBRARY_PATH --auto-reload \
                                 --max-cover $MAX_COVER --port $PORT \
                                 --username $USER --password $PASSWORD
end script

相关内容