Всем доброго времени суток. Такой вопрос: есть написанная мною программа (утилита с веб мордой, которая слушает на заданном адресе и порту и отвечает на http-запросы). Запускается, работает нормально и даже как задумано :)
Написал unit файл (hammer.service, он ниже вместе с логами), чтобы запускать с помощью systemd, положил в /etc/systemd/system. Сделал sudo systemctl daemon-reload.
Далее по команде sudo systemctl start hammer сервис запускается и работает нормально, т.е. видится в моей сети по 10.0.0.10:4242, отвечает на запросы и пр. systemctl status и systemctl stop также делают то, что должны. Но если перегрузить машину, сервис не стартует, ругаясь на «listen tcp 10.0.0.10:4242: bind: cannot assign requested address»
При этом если сразу после загрузки сделать sudo systemctl start hammer, то сервис стартует без проблем и работает.
Ниже юнит-файл и лог journalctl (как раз система запустилась, сервис не стартанул и я его стартую «руками»).
Прошу подсказать, если я пропустил что-то очевидное. В юнит-файле пробовал After=network.target или (как в логах ниже) After=netwotrk-online.target. Также пробовал Require=(оба варианта). Результат одинаковый.
Как я понимаю, After=netwotrk-online.target означает, что мой сервис должен стартовать после того, как сеть гарантированно поднялась.
В какую сторону копать? Какие есть идеи?
А теперь логи в студию…
cat /etc/systemd/system/hammer.service
[Unit]
Description=Hammer Systemd Assistant
After=network-online.target
[Service]
ExecStart=/usr/local/bin/hammer -serve -ip 10.0.0.10 -port 4242
Type=simple
[Install]
WantedBy=multi-user.target
journalctl -u hammer
-- Logs begin at Wed 2020-10-28 01:11:08 MSK, end at Wed 2020-10-28 01:17:56 MSK. --
окт 28 01:11:13 raspberry systemd[1]: Started Hammer Systemd Assistant.
окт 28 01:11:13 raspberry hammer[417]: Using /usr/local/etc/hammer.conf config file
окт 28 01:11:14 raspberry hammer[417]: listen tcp 10.0.0.10:4242: bind: cannot assign requested address
окт 28 01:11:14 raspberry systemd[1]: hammer.service: Main process exited, code=exited, status=1/FAILURE
окт 28 01:11:14 raspberry systemd[1]: hammer.service: Failed with result 'exit-code'.
окт 28 01:12:44 raspberry systemd[1]: Started Hammer Systemd Assistant.
окт 28 01:12:44 raspberry hammer[758]: Using /usr/local/etc/hammer.conf config file
Во избежание сомнений про IP адрес и пр.:
ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.10 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::a8d9:c5d0:55ab:40fc prefixlen 64 scopeid 0x20<link>
ether dc:a6:32:4a:c7:a3 txqueuelen 1000 (Ethernet)
RX packets 6860 bytes 935445 (913.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 9553 bytes 1092106 (1.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 145 bytes 57849 (56.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 145 bytes 57849 (56.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
route
route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default router 0.0.0.0 UG 202 0 0 eth0
10.0.0.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0