如何使用 systemd 列出(并重试)失败的安装

Cha*_*_99 5 linux mount systemd

我有一些安装点由于缺少依赖项而加载失败(底层文件系统尚未解密)。Asystemctl status <mountpoint>显示如下:

\n\n
root@mymachine:/sharedfolders# systemctl status /sharedfolders/Multimedia\n\xe2\x97\x8f sharedfolders-Multimedia.mount - Mount shared folder Multimedia to /sharedfolders/Multimedia\n   Loaded: loaded (/etc/systemd/system/sharedfolders-Multimedia.mount; enabled; vendor preset: enabled)\n   Active: inactive (dead)\n    Where: /sharedfolders/Multimedia\n     What: /srv/dev-disk-by-label-data/Multimedia\n\nJul 09 19:13:58 mymachine systemd[1]: Dependency failed for Mount shared folder Multimedia to /sharedfolders/Multimedia.\nJul 09 19:13:58 mymachine systemd[1]: sharedfolders-Multimedia.mount: Job sharedfolders-Multimedia.mount/start failed with result 'dependency'\n
Run Code Online (Sandbox Code Playgroud)\n\n

是否有一个systemctl命令可以列出此类失败的安装尝试,并且最好重新尝试所有这些尝试?

\n\n

我尝试过,systemctl --failed但没有在列表中看到这些挂载。\n到目前为止我发现的所有其他命令都需要我指定挂载点,这正是我首先真正想从系统中了解的内容。

\n\n

额外问题:是否有系统方式自动触发这些重试?我的意思是,依赖关系清楚地记录在安装单元中,并且(然后解密的)依赖关系的安装也是通过 systemd 完成的,因此它可以知道重新尝试那些依赖的安装。

\n

Cha*_*_99 7

我发现了

systemctl list-units -t mount --all | grep inactive |grep loaded |grep sharedfolders |grep -o "/.*" | xargs systemctl start
Run Code Online (Sandbox Code Playgroud)

到目前为止,这相当难看,仍然需要手动调用或添加到 cron 中。我希望有更好的解决方案。

我将解释这些命令:

  • -t mounts将 systemd 单元列表限制为挂载
  • --all还显示失败的
  • grep inactive将列表减少为仅失败的列表
  • grep loaded将列表限制为至少具有功能的单元(例如,不是“未找到”)
  • grep sharedfolders将列表限制为特定于我的用例的安装点
  • grep -o "/.*"将输出缩短为安装点的路径
  • xargs systemctl start将剩余的项目作为参数发送给 systemctl start,后者(再次)安装它们