我正在尝试编写一个新贵脚本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