Служба systemd выдает ошибку формата Exec
Я создал следующую службу systemd для автоматического открытия туннеля autossh между двумя серверами:
#Systemd unit file for autossh
[Unit]
Description=Autossh Tunnel
[Service]
Type=forking
ExecStart=/usr/bin/autossh -M 20009 -f -N -L 3307:127.0.0.1:3306 remoteServer
ExecStop=pkill autossh
User=ubuntu
Group=ubuntu
UMask=0007
RestartSec=1
Restart=always
[Install]
WantedBy=multi-user.target
Файл находится в/etc/systemd/system/autossh-tunnel.service
Когда я запускаю его, я получаю следующее сообщение об ошибке:
ubuntu@verifier:~/.ssh$ sudo systemctl daemon-reload
ubuntu@verifier:~/.ssh$ sudo service autossh-tunnel start
Failed to start autossh-tunnel.service: Unit autossh-tunnel.service is not loaded properly: Exec format error.
See system logs and 'systemctl status autossh-tunnel.service' for details.
ubuntu@verifier:~/.ssh$ systemctl status autossh-tunnel.service
● autossh-tunnel.service - Autossh Tunnel
Loaded: error (Reason: Exec format error)
Active: inactive (dead)
which autossh
дает:
ubuntu@verifier:~/.ssh$ which autossh
/usr/bin/autossh
Я также пытался запустить ту же самую команду/usr/bin/autossh -M 20009 -f -N -L 3307:127.0.0.1:3306 remoteServer
в консоли и у меня не возникло никаких проблем. Однако как служба systemd он терпит неудачу.
Что здесь не так? У меня есть другой сервер с такой же настройкой, и на нем этот скрипт работает без проблем. Так что я не понимаю, что здесь происходит...
1 ответ
Быстрый ответ: обязательно проверьте вывод/var/log/syslog
подробные сообщения об ошибках.
Длинный ответ: Хорошо, я понял, в чем проблема.
Вскоре после звонкаsudo service autossh-tunnel start
Я проверяю вывод и получаю вывод:
Mar 27 20:29:01 verifier systemd[1]: /etc/systemd/system/autossh-tunnel.service:9: Executable path is not absolute: pkill autossh
Mar 27 20:29:17 verifier systemd[1]: /etc/systemd/system/autossh-tunnel.service:9: Executable path is not absolute: pkill autossh
Поэтому я изменил служебный файл для вызова/usr/bin/pkill
вместо того, чтобы простоpkill
.
Это решило проблему. Сейчасsudo tail -n 200 /var/log/syslog
дает:
Mar 27 20:29:59 verifier systemd[1]: Starting Autossh Tunnel...
Mar 27 20:29:59 verifier systemd[1]: Started Autossh Tunnel.
Иps aux | grep autossh
также показывает мне, что он работает.