Systemd timers 提供了一种在 Linux 系统上设置定时任务的方法,与 crontab 类似但提供了一些额外的功能和优势。将 crontab 规则转换为 Systemd timer,需要创建一个 timer 单元文件和服务单元文件。
crontab 规则
[root@slpmivrbgne data]# crontab -l
0 3 * * * cd /data && sh tools.sh -b -c -f > /data/bk.log 2>&1
转为Systemd timer
1. 创建服务单元文件 (tools.service
):
这个服务单元文件定义了要执行的脚本和参数。
[Unit]
Description=Run tools.sh script
[Service]
Type=oneshot
ExecStart=/bin/sh /data/tools.sh -b -c -f
RemainAfterExit=true
StandardOutput=journal
StandardError=journal
保存这个文件到 /etc/systemd/system/tools.service
。
cp tools.service /etc/systemd/system/
2. 创建 timer 单元文件 (tools.timer
):
这个 timer 单元文件定义了定时任务的触发频率。
[Unit]
Description=Run tools.sh daily at 3 AM
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
[Install]
WantedBy=timers.target
保存这个文件到 /etc/systemd/system/tools.timer
。
cp tools.timer /etc/systemd/system/
3. 启动并启用 timer:
创建了服务和 timer 单元文件后,您需要重新加载 Systemd 以识别新的单元文件,然后启动并启用 timer。
systemctl daemon-reload
systemctl start tools.timer
systemctl enable tools.timer
4. 检查 timer 状态:
使用以下命令检查 timer 的状态,确保它已被正确设置并启用。
systemctl list-timers | grep tools
systemctl status tools.timer
这个 Systemd timer 将按照提供的 crontab 规则,每天 3 点执行 /data/tools.sh
脚本,并把标准输出和标准错误重定向到 /data/bk.log
文件中。
请注意,
StandardOutput
和StandardError
在 service 文件中设置为journal
,这将把输出记录到 systemd 日志中,您可以通过journalctl
命令查看。
请根据您的实际需求调整服务单元文件中的 ExecStart
路径和参数。如果需要将输出重定向到文件,您可以在 ExecStart
行中添加重定向操作,例如:
ExecStart=/bin/sh /data/tools.sh -b -c -f > /data/bk.log 2>&1
但请注意,在使用 Systemd 服务时,通常推荐使用 StandardOutput
和 StandardError
选项来控制日志记录,因为这样可以更好地与 Systemd 的日志系统集成。
参考:https://blog.csdn.net/qq_28550263/article/details/139969289