我有一个自定义的 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 密钥所需的命令,我该怎么做?
答案1
首先,您的服务应该是用户服务。系统服务无法打开终端来执行您想要的操作。如果它必须是系统服务,您需要创建一种在您登录系统时向自己发送通知的方法,以便您可以执行任务并重新启动服务。但是,作为用户服务,它将在您登录时运行,如果服务无法启动,您可以使用以下方法在您登录时弹出终端。
你的服务文件应该PartOf=graphical-session.target
在[Unit]
服务部分中Restart=always
包含一个[Service]
指向ExecStart=
运行的 shell 脚本
/home/adamfg/bin/unison default || gnome-terminal -e "bash -c 'genkey_command && exit 1'"
或类似。这将导致您的服务在您登录图形会话时启动,如果失败,则打开一个genkey_command
等待输入的终端,但始终退出 1,导致服务在生成新密钥后重新启动。
您还可以使 shell 脚本更复杂,以便它在生成新密钥后直接启动,而不是依赖于 systemd 服务重新启动,而是干净地退出。