Shell-Script
執行守護程序時,如何從給定目錄執行命令?
我的 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" because that’s the directory from where " $ 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)
有沒有其他方法可以儲存我的選項,以便我可以從所需的目錄執行我的命令?
看起來你正在做的事情有一些問題。
--exec
只接受一個參數,但是可以在start-stop-daemon
a的末尾傳遞參數--
。- 的參數
--exec
也用作標識符:start-stop-daemon
檢查是否有一個實例正在執行(這會使/bin/sh
, 一個非常糟糕的候選者。因此,創建一個 shell 腳本,預計每台機器執行一個實例。將絕對路徑傳遞給
--exec
. 在--
.