Jestem całkiem nowy w skryptach bash, ale wydaje mi się, że naprawdę brakuje tu czegoś podstawowego. Próbuję ledwo zmodyfikowanej wersji Mike Perham's upstart sidekiq script na maszynie Ubuntu 14.04, ale prawie nic nie jest oceniany zgodnie z oczekiwaniami:Czy zmieniły się skrypty upstart lub bash w systemie Ubuntu 14.04? (Próbuję załadować sidekiq z dodatkiem)
- eksport nie wydaje się działać
- źródło nie wydaje się, aby ocenić moja zmieniła zmienna PATH w .bashrc lub uruchamiając polecenie startowy rbenv
- cd nie wydaje się, aby zmienić katalogi, chyba że polecenie $ (pwd) nie jest właściwy sposób ocenić jej
Oto mój zmodyfikowany skrypt:
# /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
Oto wyjście uzyskać w pliku dziennika dorobkiewicz:
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
Wypróbuj 'exec/bin/bash << 'EOT'' (twarde cytaty wokół znacznika). Wynik powinien mieć więcej sensu. – Mat
W porządku! Dzięki, twarde cytaty pomogły. Teraz HOME jest eksportowany, a cd faktycznie zmienia katalog ... Teraz muszę tylko wymyślić, jak poprawnie załadować plik .bashrc, lub zainicjować rbenv w inny sposób – Josh