У меня есть программа на C, которая хорошо работает при запуске непосредственно из командной строки, но не работает при запуске с systemd:
Core was generated by `/usr/local/bin/midnite-modbusd'.
Program terminated with signal SIGFPE, Arithmetic exception.
#0 0x0000000000401308 in main (argc=1, argv=0x7ffeae390268) at src/midnite-modbusd.c:139
139 slen= interval - (millis % interval);
Код, о котором идет речь:
//wait for start of each sample interval
gettimeofday(&tv,NULL);
millis= (long long unsigned)tv.tv_sec*1000 + (tv.tv_usec/1000);
slen= interval - (millis % interval);
i= (millis+slen) % 1000;
usleep (slen*1000);
Полный код доступен на github .
Модуль systyemd:
[Unit]
Description=Midnite Classic modbus data polling
After=network.target
[Service]
Type=simple
User=midnite-modbusd
ExecStart=/usr/local/bin/midnite-modbusd
Restart=on-failure
[Install]
WantedBy=multi-user.target
Что может отличаться при запуске программы с помощью systemd?
Редактировать 1
Кажется, что у моей программы есть серьезные проблемы, которые возникают только при запуске с systemd:
- она не будет читать мой файл конфигурации, что должно выдать сообщение об ошибкеи
exit(1)
из-за недопустимых значений - journactl не заполняется в режиме реального времени.Используя
journactl -f
Мне нужно подождать пару минут, прежде чем я вижу кучу журналов, которые появляются внезапно
В качестве примечания к моим тестам с использованием командной строки, которую я запускаю: sudo -H -u midnite-modbusd /usr/local/bin/midnite-modbusd