gab*_*zed 2 linux service systemd
我想在 autofs 启动之前和之后运行脚本。我有两个系统服务:
backup1.service 在 autofs 之前运行
[Unit]
Description=Backup mount
[Service]
ExecStart=/backup/sw/bmount before
[Install]
WantedBy=autofs.service
Run Code Online (Sandbox Code Playgroud)
backup2.service 在 autofs 之后运行
[Unit]
Description=Backup mount
PartOf=autofs.service
After=autofs.service
[Service]
ExecStart=/backup/sw/bmount after
[Install]
WantedBy=autofs.service
Run Code Online (Sandbox Code Playgroud)
我可以确定 bmount 脚本中的前后状态,因此我可以不带参数调用它,并且我只能使用一项服务,但不知道如何使用。
是否可以?
有几种方法可以做到这一点:
根据设计,服务文件应该是可现场维护的。在基于 Debian 的平台上,供应商提供的服务文件位于 中/lib/systemd/system/,我认为 redhat 中也有它们/usr/lib/systemd/system/,但您可以使用/etc/systemd/system/.
在那种情况下,我会
cp /lib/systemd/system/autofs.service /etc/systemd/system/autofs.service
Run Code Online (Sandbox Code Playgroud)
然后在该[Service]部分中,我添加:
ExecStartPre=/backup/sw/bmount before
ExecStartPost=/backup/sw/bmount after
Run Code Online (Sandbox Code Playgroud)
手册页systemd.service说:
ExecStart= 命令仅在所有 ExecStartPre= 命令成功退出后运行。
ExecStartPost= 命令仅在 ExecStart= 中指定的命令被成功调用后运行,由 Type= 确定(即,对于 Type=simple 或 Type=idle,进程已启动,对于 Type=oneshot,最后一个 ExecStart= 进程成功退出,...)。
执行与上述相同操作的更优雅的方法是使用 drop-in。/etc/systemd/system/autofs.service.d/backup.conf只需使用以下内容创建:
[Service]
ExecStartPre=/backup/sw/bmount before
ExecStartPost=/backup/sw/bmount after
Run Code Online (Sandbox Code Playgroud)
也许autofs.service已经有了ExecStartPre命令ExecStartPost,而您担心会干扰该服务。在这种情况下,您可以使用关系来启动/停止您的服务。
[Unit]
Description=Backup mount
PartOf=autofs.service
Before=autofs.service
[Service]
Type=oneshot
ExecStart=/backup/sw/bmount before
[Install]
WantedBy=autofs.service
Run Code Online (Sandbox Code Playgroud)
和
[Unit]
Description=Backup mount
PartOf=autofs.service
After=autofs.service
[Service]
Type=oneshot
ExecStart=/backup/sw/bmount after
[Install]
WantedBy=autofs.service
Run Code Online (Sandbox Code Playgroud)
在这种情况下:
PartOf=autofs.service意思是“当 systemd 停止或重新启动时autofs.service,操作将传播到backup.service”Before=autofs.service意思是“如果两个单元都正在启动,autofs.service则启动将被延迟,直到backup.service完成启动。”After=autofs.service意思是“如果两个单元都正在启动,backup.service则启动将被延迟,直到autofs.service完成启动。”WantedBy=autofs.service意思是“backup.service如果是则启动autofs.service”。Type=oneshot意味着即使进程完成后,服务仍将被视为正在运行ExecStart=。请务必运行,systemctl daemon-reload以便 systemd 读取新服务。还要运行systemctl enable backup.service以确保WantedBy=成为Wants=for autofs.service。
我认为您的解决方案非常接近。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           11603 次  |  
        
|   最近记录:  |