目录
1.在/root目录下创建systemd_time.sh脚本
1.进入/etc/systemd/system目录下 创建服务单元文件(.service)
一、自定义shell脚本
1.在/root目录下创建systemd_time.sh脚本
vim systemd_time.sh
#!/bin/bash
echo $(date) >> /root/syslog.txt
sleep 3
~
- 使用
date
命令获取当前的日期和时间。- 将当前的日期和时间追加到/root/syslog.txt文件中。
- 然后暂停执行 3 秒钟(使用
sleep 3
)。
2.创建syslog.txt文件
touch syslog.txt
3.给脚本运行权限
chmod +x systemd_time.sh
二、编写单元文件
1.进入/etc/systemd/system目录下 创建服务单元文件(.service)
cd /etc/systemd/system
vim systemd_time.service
[Unit]
Description=Backup Service
[Service]
Type=simple
ExecStart=/root/systemd_time.sh
[Install]
WantedBy=multi-user.target
[Unit]
:这一部分定义了系统单元的基本信息。
Description=Backup Service
:描述了这个服务的简短描述,表明这个服务是一个备份服务。
[Service]
:这一部分定义了服务的具体运行方式。
Type=simple
:指定了服务的启动类型,这里是简单的启动类型。简单的启动类型意味着 Systemd 不会对服务的主进程进行额外的跟踪和管理。ExecStart=/root/systemd_time.sh
:指定了服务启动时需要执行的命令或脚本,这里是执行/root/systemd_time.sh
脚本。
[Install]
:这一部分定义了如何安装这个服务。
WantedBy=multi-user.target
:指定了这个服务应该在何时安装。在这里,它表明这个服务会被安装在多用户环境(multi-user.target)中,即系统启动时会被启用。
2.创建定时器单元文件(.timer)
vim backup.timer
[Unit]
Description=Executed every minute
[Timer]
OnBootSec=3s
OnUnitActiveSec=3s
Unit=systemd_time.service
[Install]
WantedBy=multi-user.target
[Unit]
:这一部分定义了定时器单元的基本信息。
Description=Executed every minute
:描述了这个定时器的简短描述,表明这个定时器是用于每分钟执行的任务。
[Timer]
:这一部分定义了定时器的触发条件和行为。
OnBootSec=3s
:指定了定时器在系统启动后延迟多长时间开始第一次触发任务。在这里,3s
表示延迟 3 秒后开始第一次触发任务。OnUnitActiveSec=3s
:指定了定时器在前一次任务触发后,再次触发任务之间的间隔时间。在这里,3s
表示任务触发间隔为 3 秒。Unit=systemd_time.service
:指定了定时器要触发的单元(服务)名称,即当定时器触发时会启动systemd_time.service
这个服务。
[Install]
:这一部分定义了如何安装这个定时器。
WantedBy=multi-user.target
:指定了这个定时器应该在何时安装。在这里,它表明这个定时器会被安装在多用户环境(multi-user.target)中,即系统启动时会被启用。
补充:(在 Systemd 中,定时器(timer)单元通常需要与一个服务单元相关联)
为每个定时器单元配对一个服务单元有几个原因:
执行任务:定时器的主要目的是触发特定的任务或操作。这些任务通常由相应的服务单元定义和执行。因此,定时器需要与服务相关联,以在定时器触发时启动服务并执行任务。
结构清晰:将定时器与服务相关联可以使配置更加清晰和结构化。通过将定时器和服务放在一起,管理员可以更容易地理解和管理定时任务的执行逻辑。
可重用性:通过将定时器和服务分开定义,可以提高定时任务的可重用性。多个定时器可以引用相同的服务单元,从而避免了重复定义相同的任务。
灵活性:将定时器和服务分开定义也提供了更大的灵活性。管理员可以根据需要更改定时器或服务的配置,而不会影响到另一个。
综上所述,定时器与服务相关联是 Systemd 设计的一部分,这样做有助于将定时任务的触发和执行逻辑分离开来,提高了可管理性和灵活性。
3.重新加载自定义配置systemd文件,启动单元文件
systemctl daemon-reload
systemctl start backup.timer
systemctl enable backup.timer
systemctl status backup.timer