我的 shell 脚本知识有点不稳定,但我想运行 /etc/init.d/unicorn 中定义的守护进程(Ubuntu 14.04),如下所示
case "$1" in
start)
check_config
check_app_root
log_daemon_msg "Starting $DESC" $NAME || true
if start-stop-daemon --start --quiet --oknodo --pidfile $PID --exec $DAEMON -- $UNICORN_OPTS; then
在单独的文件 /etc/default/unicorn 中,我定义了以下变量:
APP_ROOT=/home/rails/myproject
...
UNICORN_OPTS="-D -c $CONFIG_RB -E $RAILS_ENV"
...
DAEMON="cd $APP_ROOT; $GEM_HOME/bin/bundle exec $GEM_PATH/bin/unicorn"
我添加了“cd $APP_ROOT”,因为这是“$GEM_HOME/bin/bundle”必须运行的目录。但是,当我启动服务时,出现以下错误:
myuser@myproject:~$ sudo service unicorn restart
/home/rails/.gem/bin/bundle
* Restarting Unicorn web server unicorn
start-stop-daemon: unable to stat //cd (No such file or directory)
是否有其他方法可以存储我的选项,以便我可以从所需的目录运行我的命令?
答案1
您所做的事情似乎存在一些问题。
--exec
start-stop-daemon
只接受一个参数,但是可以在a 的末尾传递参数--
。的参数
--exec
也用作标识符:start-stop-daemon
检查是否有一个实例正在运行(这将使 成为/bin/sh
一个非常糟糕的候选者。
因此,创建一个 shell 脚本,预计每台机器运行一个实例。将绝对路径传递给--exec
.在--
.