Я используюos-svc-daemon
для создания моего стартового сервиса для проекта OpenStack.
моя конфигурация задания upstart выглядит следующим образом
Файл: /etc/init/myservice.conf
start on runlevel [2345]
stop on runlevel [016]
env OS_SVC_ENABLE_CONTROL=1
export OS_SVC_ENABLE_CONTROL
pre-start script
mkdir -p /var/run/myservice
chown -R root:root /var/run/myservice
end script
respawn
# the default post-start of 1 second sleep delays respawning enough to
# not hit the default of 10 times in 5 seconds. Make it 2 times in 5s.
respawn limit 2 5
exec start-stop-daemon --start -c root --exec /opt/stack/venvs/openstack/bin/myservice --
post-start exec sleep 1
Эта служба запускается от имени пользователя root.
Если я запускаю, start-stop-daemon --start -c root --exec /opt/stack/venvs/openstack/bin/myservice
то всё работает нормально.
Но когда я проверяю статус с помощью
~# initctl start myservice
myservice stop/starting
~# initctl status myservice
myservice stop/waiting
Я тоже попробовалОтладка
start on runlevel [2345]
stop on runlevel [016]
env OS_SVC_ENABLE_CONTROL=1
export OS_SVC_ENABLE_CONTROL
pre-start script
mkdir -p /var/run/myservice
chown -R root:root /var/run/myservice
end script
script
echo "DEBUG: `set`" >> /tmp/myjob.log
# rest of script follows...
end script
respawn
# the default post-start of 1 second sleep delays respawning enough to
# not hit the default of 10 times in 5 seconds. Make it 2 times in 5s.
respawn limit 2 5
exec start-stop-daemon --start -c root --exec /opt/stack/venvs/openstack/bin/myservice --
post-start exec sleep 1
Но это не создает файл в/tmp
решение1
Я предполагаю, что одна из команд в вашемсценарий перед стартомне удается (вероятно, mkdir). Попробуйте добавить "|| true"
pre-start script
mkdir -p /var/run/myservice || true
chown -R root:root /var/run/myservice || true
end script
Вы должны увидетьпидпоявляются после initctl start myservice
команды