Дальнейшее расследование показало, что проблема связана с тем, что программа имеет открытый дескриптор файла устройства последовательного порта, когда модем отключается от USB-порта 1 . Я предполагаю, что ядро отправляет SIGHUP, чтобы сообщить программе об отключении. Это прекрасно обрабатывается Python без каких-либо ошибок, и программа работает без проблем при нормальном выполнении. Однако похоже, что systemd перехватывает сигнал SIGHUP и интерпретирует его как сбой, убивая программу. Изменение программы для работы по-другому помогло обойти проблему.
1:Причина, по которой дескриптор файла остается открытым, заключается в том, что после отправки команды выключения программа ждет, пока модем не отправит ей сообщение о полном завершении работы. К сожалению, модем отключается от USB сразу после отправки сообщения, что не дает программе достаточно времени, чтобы разобрать ответ и затем закрыть дескриптор файла.
Я нашел решение на польском форуме Manjaro . Вместо cron нужно установитьcronie
:
sudo pacman -S cronie
sudo systemctl enable cronie.service
sudo systemctl start cronie.service
Затем мы можем настроить как обычный crontab.