我有一个名为内容的文件~/.config/systemd/user/ssh-agent.service
:
[Unit]
Description=SSH key agent
[Service]
Type=simple
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
Environment=SYSTEMD_LOG_LEVEL=debug
ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK
[Install]
WantedBy=default.target
我可以启动服务并使用 ssh-agent,但是如果我像这样停止服务systemctl --user stop ssh-agent
,服务就会失败:
Dec 08 17:13:11 box systemd[571]: Stopping SSH key agent...
Dec 08 17:13:11 box systemd[571]: ssh-agent.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
Dec 08 17:13:11 box systemd[571]: ssh-agent.service: Failed with result 'exit-code'.
Dec 08 17:13:11 box systemd[571]: Stopped SSH key agent.
该单元被标记为处于“失败”状态,我无法找出原因。设置KillMode=none
使错误消失,但代理当然不会被杀死。知道什么可能导致失败吗?我还尝试在 ssh-agent 调用中设置Type=forking
和删除。-D
答案1
ssh-agent
通常以退出代码 2 退出,请参阅这里。你可以在 ExecStart 语句前面加上前缀-
忽略非零退出代码。
ExecStart=-/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK
答案2
这里的问题不是失败,而是你的systemctl --user status <svc>
输出:
status=2/INVALIDARGUMENT
这个错误来自 $SSH_AUTH_SOCK 变量;所以绑定地址有问题,尝试删除使用默认地址-a ${SSH_AUTH_SOCK}
就没有了。
失败状态仍然存在,要摆脱它,您必须实现一个完整的单元解决方案来停止和启动,因为返回代码。