Dr_Elvis
@Dr_Elvis
В гугле забанен

Как исправить ошибку ssh?

есть сервис который стартует мой вебсервер
[Unit]
Description=Gunicorn instance to serve wserv
After=network.target

[Service]
User=wserv
Group=wserv
WorkingDirectory=/home/wserv/
Environment="PATH=/home/wserv/venv/bin"
ExecStartPre=/usr/bin/git --git-dir=/home/wserv/.git pull origin master
ExecStart=/home/wserv/venv/bin/gunicorn --worker-class eventlet -w 1 app.wsgi:app -b 127.0.0.1:8002

[Install]
WantedBy=multi-user.target

Без ExecStartPre - запускается нормально, но по моей задумке при запуске нужно проверить имеются ли изменения в репозитории, если есть - загрузить и тогда запустить сервер.
Однако в таком случае мне выдает ошибку:
Dec 20 17:38:12 elvis systemd[1]: Starting Gunicorn instance to serve wserv...
Dec 20 17:38:12 elvis git[12030]: error: cannot run ssh: No such file or directory
Dec 20 17:38:12 elvis git[12030]: fatal: unable to fork
Dec 20 17:38:12 elvis systemd[1]: wserv.service: Control process exited, code=exited status=1
Dec 20 17:38:12 elvis systemd[1]: Failed to start Gunicorn instance to serve wserv.
Dec 20 17:38:12 elvis systemd[1]: wserv.service: Unit entered failed state.
Dec 20 17:38:12 elvis systemd[1]: wserv.service: Failed with result 'exit-code'.

Ругается на ssh, но сама команда ssh работает, как под пользователем wserv, так и под рутом. Ровно так же работает и команда
/usr/bin/git --git-dir=/home/wserv/.git pull origin master

в env добавлена строчка GIT_SSH_COMMAND=ssh -i /home/wserv/.ssh/id_ed25519 сам ключ там и лежит.

Почему не может найти ssh? куда еще его прописать?
  • Вопрос задан
  • 353 просмотра
Пригласить эксперта
Ответы на вопрос 3
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Внутри systemd скорее всего пустой env, поэтому не находит сам ssh. Укажите полный путь к ssh в GIT_SSH_COMMAND=/path/to/ssh
Ответ написан
ValdikSS
@ValdikSS
У вас ошибка unable to fork. Либо настройки cgroup имеют жёсткие лимиты по количеству процессов, либо блокировка исходит из selinux/apparmor, либо вы используете средства изоляции systemd, но исключили их из выложенного выше конфигурационного файла.
Ответ написан
Комментировать
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Проще всего сразу в конфиге SSH прописать ключ для хоста и тогда SSH сам использует этот ключ, когда гит его запустит. .ssh/config:
Host github.com
  IdentityFile ~/.ssh/id_ed25519

В случае, если требуется несколько разных ключей для разных репозиториев, то делается так:
Host github.com-project-1
  HostName    = github.com
  IdentityFile ~/.ssh/project-1
Host github.com-project-2
  HostName    = github.com
  IdentityFile ~/.ssh/project-2

И соответственно для клонирования нужного репозитория использовать соответствующий для него хост. Т.о. все настройки ключей доступа для всех проектов будут в одном месте - в конфиге SSH, а не разбросаны по куче разных скриптов и файлов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы