如果 systemd 服务失败,请打开终端运行命令

如果 systemd 服务失败,请打开终端运行命令

我有一个自定义的 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 服务重新启动,而是干净地退出。

相关内容