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