我有一个自定义的 systemd 服务。有时它会失败,因为我需要重新生成我的 ssh 密钥。错误信息如下:
unison.service - Unison Sync
Loaded: loaded (/etc/systemd/system/unison.service; disabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2019-10-07 09:14:25 IST; 884ms ago
Process: 14607 ExecStart=/home/adamfg/bin/unison default (code=exited, status=3)
Main PID: 14607 (code=exited, status=3)
发生此错误时,我希望终端打开运行重新生成 mt ssh 密钥所需的命令,我该怎么做?
首先,您的服务应该是用户服务。系统服务无法打开终端来做你想做的事。如果它必须是系统服务,则需要创建一种在登录系统时向自己发送通知的方法,以便执行任务并重新启动服务。但是作为用户服务,它会在您登录时运行,如果服务启动失败,您可以使用以下方法在您登录时弹出一个终端。
您的服务文件应该
PartOf=graphical-session.target
在[Unit]
服务部分中,并Restart=always
在[Service]
您ExecStart=
指向运行的 shell 脚本中或类似的。这将导致您的服务在您登录图形会话时启动,如果失败,打开一个
genkey_command
等待输入的终端,但始终退出 1,导致服务在生成新密钥后重新启动。您还可以使 shell 脚本更复杂,以便在生成新密钥后直接启动而不是依赖 systemd 服务重新启动,然后干净地退出。