Centos系统中创建定时器完成定时任务
时间不一定能证明很多东西,但是一定能看透很多东西,坚信自己的选择,不动摇,使劲跑,明天会更好。
在 CentOS 上,可以使用 systemd
定时器来创建一个每十秒执行一次的任务。systemd
的定时器提供了更细粒度的定时功能,可以替代 cron
来执行任务。以下是如何使用 systemd
定时器来实现每十秒执行一次脚本的步骤:
1. 创建一个执行任务的脚本
首先,创建一个脚本来执行所需的任务。例如,创建一个脚本 /usr/local/bin/create_wanghui.sh
,内容如下:
#!/bin/bash# 定义要创建的目录
DIRECTORY="/usr/local/src/wanghui"# 检查目录是否已经存在
if [ -d "$DIRECTORY" ]; thenecho "目录 $DIRECTORY 已经存在."
else# 创建目录mkdir -p "$DIRECTORY"# 检查是否创建成功if [ -d "$DIRECTORY" ]; thenecho "目录 $DIRECTORY 已成功创建."elseecho "目录 $DIRECTORY 创建失败."fi
fi
2. 赋予脚本执行权限
chmod +x /usr/local/bin/create_wanghui.sh
3. 创建一个 systemd
服务单元文件
创建一个 systemd
服务单元文件 /etc/systemd/system/create_wanghui.service
,内容如下:
[Unit]
Description=Create Wanghui Directory[Service]
ExecStart=/usr/local/bin/create_wanghui.sh
4. 创建一个 systemd
定时器单元文件
创建一个 systemd
定时器单元文件 /etc/systemd/system/create_wanghui.timer
:
[Unit]
Description=Run create_wanghui.sh every 10 seconds[Timer]
OnBootSec=10sec
OnUnitActiveSec=10sec[Install]
WantedBy=timers.target
这段配置是一个
systemd
定时器单元文件的内容,用于定义一个任务每隔10秒钟执行一次。以下是对各部分的详细解释:
[Unit]
- Description=Run create_wanghui.sh every 10 seconds
这一行提供了定时器的简短描述,用来说明定时器的用途。在这个例子中,它描述了该定时器会每10秒执行一次create_wanghui.sh
脚本。
[Timer]
OnBootSec=10sec
这个选项指定了定时器在系统启动后多久首次启动。在这里,它设置为10sec
,意味着系统启动后10秒钟,定时器会首次运行。OnUnitActiveSec=10sec
这个选项指定了定时器在上次启动后多久再次启动。在这里,设置为10sec
,意味着定时器在每次任务完成后10秒钟再次启动任务。因此,任务会每隔10秒钟执行一次。
[Install]
- WantedBy=timers.target
这一行指定了定时器在什么时候启动。timers.target
是一个systemd
目标,表示当系统到达timers.target
这个状态时(通常是在系统启动的过程中),这个定时器将会被启用。总体解释
这个
systemd
定时器配置用于设置一个任务,每次系统启动后10秒钟运行,并且之后每隔10秒钟重复执行该任务。定时器的行为由OnBootSec
和OnUnitActiveSec
两个指令控制,确保任务定期执行。如果这个定时器被启用,它将从系统启动后10秒钟开始,每10秒钟运行一次指定的服务(通常是一个脚本或程序)。
如果想要每天凌晨一点执行呢
[Unit]
Description=Run create_wanghui.sh daily at 1 AM[Timer]
OnCalendar=*-*-* 01:00:00
Persistent=true[Install]
WantedBy=timers.target
这段配置是一个
systemd
定时器单元文件,用于每天凌晨1点运行create_wanghui.sh
脚本。以下是各部分的详细解释:
[Unit]
- Description=Run create_wanghui.sh daily at 1 AM
这行描述了定时器的用途,即每天凌晨1点执行create_wanghui.sh
脚本。
[Timer]
OnCalendar=-- 01:00:00*
这一行定义了定时器的执行时间。OnCalendar
指定了一个日期和时间格式:
*-*-*
表示任意年份、任意月份、任意日期。
01:00:00
表示每天的凌晨1点整。因此,这个定时器配置将会在每天凌晨1点00分00秒触发任务。
- Persistent=true
这一行确保了当系统在计划执行时间未运行时,任务会在下次系统启动时自动执行。这意味着即使系统在凌晨1点关闭或处于睡眠状态,任务将在系统再次启动时立即执行,确保任务不会错过。
[Install]
- WantedBy=timers.target
这一行指定了定时器在timers.target
到达时启动。timers.target
是一个系统级别的目标,表示定时任务将会在系统达到这个目标时开始运行。总体解释
这个
systemd
定时器配置用于设置一个任务,确保它每天在凌晨1点准时执行。如果系统在计划执行时间之前未开机或在执行时间处于睡眠状态,那么任务会在系统下次启动时立即执行,以保证任务不会错过。
5. 重新加载 systemd
配置并启动定时器
重新加载 systemd
配置,以使其识别新创建的单元文件:
sudo systemctl daemon-reload
启动定时器:
sudo systemctl start create_wanghui.timer
启用定时器,使其在系统启动时自动启动:
sudo systemctl enable create_wanghui.timer
6. 检查定时器状态
你可以使用以下命令检查定时器的状态和下一次触发时间:
systemctl list-timers create_wanghui.timer
这样,你就创建了一个 systemd
定时器,每十秒运行一次指定的脚本。这个方法利用了 systemd
的定时器功能,比 cron
更灵活和强大,特别是在需要精细的时间控制时。