很多教程都是使用crontab來實現定時功能,但crontab在ubuntu下默認并沒有安裝。而systemd也能實現定時任務功能,所以就直接使用它了,特在此作記錄。
需求:每天凌晨一點執行一次腳本
我喜歡把自己寫的定時器放在/usr/lib/systemd/system目錄下,如果不存在則新建一個,便于管理。
Start
需要新建兩個文件
- mytimer.service
[Unit]
Description=備份tomcat前一天的log
[Service]
Type=simple
ExecStart=/root/sliceCatalina.sh
- mytimer.timer
[Unit]
Description=每天凌晨一點備份tomcat前一天的log
[Timer]
OnCalendar=*-*-* 01:00:00
Unit=mytimer.service
[Install]
WantedBy=multi-user.target
啟動定時任務
systemctl daemon-reload # 重新加載服務
systemctl enable mytimer.service
systemctl enable mytimer.timer
systemctl start mytimer.timer
查看timer運行狀態
systemctl status mytimer.timer
journalctl -f -u mytimer.timer # 查看定時器運行日志
關閉定時任務
systemctl disable mytimer.timer #關閉開機啟動(即刪除目錄鏈接)
systemctl stop mytimer.timer # 關閉單元
systemctl stop mytimer.service
之后刪除timer 和Service文件
systemctl daemon-reload # 重新加載配置
擴展
其實大家也看到了,timer的核心就是在[Timer]
這一個點上,只要理解了就能很輕易的編寫定時任務了,下面舉幾個例子讓大家理解。
- 每月26號的凌晨0點半執行一次:
OnCalendar=*-*-26 00:30:00
- 自定時器啟動10分鐘后間隔1小時執行一次
OnBootSec=10min OnUnitActiveSec=1h