Аз съм доста нов в скриптовете за bash, но имам чувството, че наистина ми липсва нещо основно тук. Опитвам се да направя едва модифицирана версия на скрипта за upstart sidekiq на Майк Пъръм на машина с Ubuntu 14.04, но почти нищо не се оценява според очакванията:
- експортирането изглежда не работи
- източникът изглежда не оценява моята променена променлива PATH в .bashrc или изпълнява командата rbenv init
- cd изглежда не променя директории, освен ако командата $(pwd) не е правилният начин за оценка
Ето моя модифициран скрипт:
# /etc/init/sidekiq.conf - Sidekiq config
# This example config should work with Ubuntu 12.04+. It
# allows you to manage multiple Sidekiq instances with
# Upstart, Ubuntu's native service management tool.
# change to match your deployment user
setuid deploy
setgid deploy
stop on (stopping workers or runlevel [06])
respawn
respawn limit 3 30
instance $index
script
# this script runs in /bin/sh by default
# respawn as bash so we can source in rbenv
exec /bin/bash <<EOT
# use syslog for logging
# exec &> /dev/kmsg
# pull in system rbenv
export HOME=/home/deploy
echo "home is $HOME"
source /home/deploy/.bashrc
echo "path is $PATH"
cd /home/deploy/domain_freek/current
echo "user is $(whoami) and pwd is $(pwd) and rbenv is located at $(which rbenv)"
exec bundle exec sidekiq -i ${index} -e production
EOT
end script
Ето резултата, който получавам в регистрационния файл на upstart:
home is
path is /usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin
user is deploy and pwd is / and rbenv is located at
/bin/bash: line 12: exec: bundle: not found
exec /bin/bash <<'EOT'
(твърди кавички около маркера). Резултатът трябва да има повече смисъл. - person Mat   schedule 18.10.2014