Служба 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также показывает мне, что он работает.

Другие вопросы по тегам