24.5. 使用 systemd 单元文件调度作业在下一次引导时运行
cron、anacron、at 和 batch 实用程序允许在特定时间或系统工作负载达到特定水平时调度作业。也可以创建将在下一次系统引导期间运行的作业。这可以通过创建一个 systemd
单元文件来实现,它指定要运行的脚本及其依赖项。
将脚本配置为在下次引导时运行:
创建
systemd
单元文件,指定要在引导过程的哪个阶段运行 脚本。这个示例显示了一个单元文件,它带有合理的Wants= 和
依赖项集合:After=
~]# cat /etc/systemd/system/one-time.service [Unit] # The script needs to execute after: # network interfaces are configured Wants=network-online.target After=network-online.target # all remote filesystems (NFS/_netdev) are mounted After=remote-fs.target # name (DNS) and user resolution from remote databases (AD/LDAP) are available After=nss-user-lookup.target nss-lookup.target # the system clock has synchronized After=time-sync.target [Service] Type=oneshot ExecStart=/usr/local/bin/foobar.sh [Install] WantedBy=multi-user.target
如果您使用这个示例:
-
将
/usr/local/bin/foobar.sh
替换为脚本的名称 如果需要,修改
After=
条目集合有关指定引导阶段的详情请参考 第 10.6 节 “创建和修改 systemd 单元文件”。
-
将
如果您在执行脚本后希望
systemd
服务保持活跃状态,请将RemainAfterExit=yes
行添加到[Service]
部分:[Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/local/bin/foobar.sh
重新载入
systemd
守护进程:~]# systemctl daemon-reload
启用
systemd
服务:~]# systemctl enable one-time.service
创建要执行的脚本:
~]# cat /usr/local/bin/foobar.sh #!/bin/bash touch /root/test_file
如果您希望脚本只在下一次引导时运行,而不是在每次引导时都运行,请添加一行来禁用
systemd
单元:#!/bin/bash touch /root/test_file systemctl disable one-time.service
使脚本可执行:
~]# chmod +x /usr/local/bin/foobar.sh