Я борюсь с переносом сценария инициализации на systemd на Debian Jessie.
Цель состоит в том, чтобы получить доступ к URL-адресу после загрузки и до завершения работы. Служебный файл выглядит следующим образом:
[Unit]
Description=some_name
After=syslog.target network-online.target
Wants=network-online.target
[Service]
Type=oneshot
ExecStart=/bin/bash /home/xyz/scripts/register.bash
ExecStop=/bin/bash /home/xyz/scripts/deregister.bash
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Сценарий регистрации (URL-адреса заменены на xyz, эхо для отладки):
#!/bin/bash
IP=$(hostname -I)
IP=${IP/ /}
echo "-- register $(date) IP=$IP" >>/home/xyz/register.txt
echo " $(who -r) ID=$(id) HOST=$(host x.y.z)" >>/home/xyz/register.txt
/usr/bin/curl --max-time 30 "http://x.y.z/some_script" -s -o /dev/null
echo " exit code $?" >>/home/xyz/register.txt
echo "-- reg done $(date)" >>/home/xyz/register.txt
exit 0
Запуск сценариев из командной строки работает должным образом, в том числе и с правами root. В частности, curl обращается к URL так, как должен.
Также скрипт запускается при загрузке и завершении работы и ведет соответствующие трассировки в register.txt. Все идет нормально.
Что не работает, так это то, что curl завершается с кодом 28 (тайм-аут) при запуске через systemd. Это также происходит, когда я запускаю его с помощью "systemd start" из полностью загруженной системы с запущенной и работающей сетью. Так что недоступность сети, похоже, не является причиной тайм-аута.
Почему в этих условиях истекает время ожидания curl и что мне нужно изменить, чтобы служба работала должным образом?
Спасибо за вашу помощь