systemctl实现定时任务(比crontab好用)
假设有一个 kline_dumper
的服务,想实现每隔10分钟自动启动/停止,使用crontab可以很简单的实现,使用systemctl也能够方便的实现;
一、准备工作
1、创建 kline_dumper.service
[Unit]
Description=Kline Dumper service[Service]
ExecStart=/opt/price/bin/kline_dumper
Restart=on-failure
WorkingDirectory=/opt/price/bin --flagfile=/opt/price/bin/config/price.flags
StandardOutput=journal
StandardError=journal[Install]
WantedBy=multi-user.target
2、创建 kline_dumper-restart.service
和 kline_dumper-restart.timer
kline_dumper-restart.service
:
[Unit]
Description=Restart kline_dumper with delay[Service]
Type=oneshot
ExecStart=/bin/bash -c '/bin/systemctl stop kline_dumper.service && sleep 10 && /bin/systemctl start kline_dumper.service'
kline_dumper-restart.timer
[Unit]
Description=Restart kline_dumper every 10 minutes[Timer]
OnCalendar=*:0/10
AccuracySec=1s
Unit=kline_dumper-restart.service[Install]
WantedBy=timers.target
把这些文件copy到 /etc/systemd/system
目录
二、使用配置
1、执行下面的命令:
sudo systemctl daemon-reload
sudo systemctl enable --now kline_dumper.service
sudo systemctl enable --now kline_dumper-restart.timer
2、检查状态:
systemctl list-timers --all | grep kline_dumper
systemctl status kline_dumper-restart.timer
如果运行正常,刚一般会看到下面的输出:
● kline_dumper-restart.timer - Restart kline_dumper every 10 minutesLoaded: loaded (/etc/systemd/system/kline_dumper-restart.timer; enabled)Active: active (waiting) since ...Trigger: Fri 2025-05-30 14:20:00 CST; 5min left
当然,也可以像下面这样查看日志:
journalctl -u kline_dumper.service
journalctl -u kline_dumper-restart.service