Программное обеспечение работает при запуске вручную через терминал, но не как услуга Upstart
Я написал программное обеспечение, которое будет выполнять роль сервера для приложения, которое я создал. Это прекрасно работает, когда я запускаю его из терминала, но каждый раз вылетает при очень конкретном действии, когда я запускаю его как сервис Upstart . Я думаю, что это происходит сбой, когда он читает из файла, но это трудно понять с помощью Haskell.
Вот как я запускаю его в терминале (когда он работает):
cd /srv/MyApp/
sudo -u appServerUser -g appServerUser ./appServer
А это мой Upstart .conf (помещенный в /etc/init/) (который вылетает):
start on runlevel [2345]
stop on runlevel [^2345]
chdir /srv/MyApp/
setuid appServerUser
setgid appServerUser
respawn limit 5 5
exec ./appServer
Я неправильно настроил Upstart? Или почему программа ведет себя по-разному, когда она должна иметь одинаковые привилегии и запускается из одного и того же места.
Я понял, что был немного не прав по поводу сбоя программы. Программа не падает, но поток не.
НАЙТИ ИСТОЧНИК: После большого количества минимизации я понял, что он падает, когда пытается прочитать символы не ASCII. Почему происходит сбой только при запуске как Upstart я вне меня, но я нашел проблему, и я бы сказал, что это ошибка в компиляторе или в Upstart .
2 ответа
Хорошо, я нашел проблему. Почему всегда есть такие простые ответы на такие сложные проблемы. Мне нужно было поставить:
env LAN=en_US.UTF-8
в.conf
Были некоторые проблемы с chdir и upstart некоторое время назад. Обычно upstart делал странные вещи с процессами, которые приводили к тому, что./application выполнялся не из каталога, заданного chdir iirc.
Пытаться exec /srv/MyApp/appServer
без чдир или exec 'cd /srv/MyApp/; ./appServer'
(здесь будет разница в объеме для работы dir, но это не должно иметь значения в вашем примере)