Мои знания сценария оболочки немного шаткие, но я хочу запустить демон (Ubuntu 14.04), определенный в /etc/init.d/unicorn вот так
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)
Есть ли другой способ сохранить свои параметры, чтобы я мог запускать свою команду из нужного каталога?
Похоже, у вас несколько проблем с тем, что вы делаете.
- exec
принимает только один аргумент, однако аргументы могут быть переданы в конце start-stop-daemon
после -
.
Аргумент - exec
также используется в качестве идентификатора: start-stop-daemon
проверяет, запущен ли экземпляр (это сделало бы / bin / sh
, очень плохой кандидат.
Поэтому создайте сценарий оболочки, который, как ожидается, будет иметь один экземпляр, работающий на каждой машине. Передайте абсолютный путь к - exec
. Передайте любой аргументы, необходимые скрипту в конце после -
.