Программное обеспечение работает при запуске вручную через терминал, но не как услуга 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, но это не должно иметь значения в вашем примере)

Другие вопросы по тегам