Linux 設置定時任務常用的三種方法
發布時間:2024-01-31 13:49:10
1、使用 cron 設置定時任務
cron 是(shì) Linux 中最常用的定時任務調度器。它允許用戶在指定的日期和時間運行腳本和命令。使用 cron 設置定時任務的三種方法如下,
1)編輯用戶的 crontab 文件
用于單個用戶設置定時任務,打開用戶的 crontab
文件,命令如下,
crontab -e
在 crontab 文件中,添加一行來定義定時任務,格式如下,
分 時 日 月 周 命令
例如,
每天淩晨3點運行腳本,如下,
0 1 * * * /path/to/script.sh
添加完成後,保存文件退出。
2)使用預定義的 cron 目錄
Linux 系統通常包含一些預定義的目錄,用于存放(fàng)定期執行的腳本,目錄如下,
/etc/cron.daily /etc/cron.hourly /etc/cron.weekly /etc/cron.monthly
系統将按照目錄名稱指定的頻(pín)率執行這些腳本。另外還需要将腳本添加執行權限。例如,
chmod +x /path/to/script.sh
3)在 /etc/crontab 文件中添加任務
對于系統級的任務,可以直接在 /etc/crontab
文件中添加,添加方法和用戶的crontab
文件中添加方法差不多,但(dàn)多了一個用戶的字段,格式如下,
分 時 日 月 周 用戶 命令
例如,
以 root 每天淩晨3點運行腳本,如下,
0 3 * * * root /path/to/script.sh
2、使用 at 設置定時任務
用于設置一次性任務,它會在指定的時間運行一次任務。它允許指定将在未來某個時間點執行的命令。
1)安裝 at
在某些 Linux 發行版中,at 服務可能默認沒有安裝。您可以使用包管理器進行安裝:
對于基于 Debian/Ubuntu 的系統:
sudo apt-get install at
對于基于 RedHat/CentOS 的系統:
sudo yum install at
2)啓動 at 服務
啓動并設置開機自動啓動:
sudo systemctl start atd sudo systemctl enable atd
3)使用 at 設置定時任務
使用 at
後跟執行任務的時間來設置定時任務。at
接受多種時間格式,例如,
在今天下午 10:30 執行腳本:
echo "/path/to/script.sh" | at 22:30
在當前時間之後的 30 分鍾執行腳本:
echo "/path/to/script.sh" | at now + 30 minutes
4)管理 at 任務
列出待執行的 at
任務,使用命令如下,
atq
删除 at
任務,使用命令如下,
atrm <job number>
可以查看任務腳本中指定的日志文件或輸出文件,來檢查任務執行狀态。
3、使用 systemd 定時器設置定時任務
systemd 定時器是(shì)一種替代傳統 cron 的方法,用于安排定時任務。systemd 定時器由兩部分組成:一個 .service
文件和一個 .timer
文件。.service
文件定義了要執行的任務,而 .timer
文件設定了何時執行這個任務。
1)創建服務文件
創建一個 .service 文件來定義要執行的任務。例如,
創建 /etc/systemd/system/mytask.service
文件,内容如下,
[Unit] Description=checkIP [Service] Type=simple ExecStart=/root/chechIP.sh
腳本添加執行權限:
chmod +x /root/chechIP.sh
2)創建 .timer 文件
.service
文件創建完成後,還需要創建一個定時器文件(.timer
),例如,
創建 /etc/systemd/system/mytask.timer 文件,内容如下,
[Unit] Description=checkIP every 30s [Timer] OnActiveSec=60 OnUnitActiveSec=30 Unit=mytask.service [Install] WantedBy=multi-user.target
systemd 定時器可用選項:
選項 | 描述 |
OnActiveSec | 定時器生效後,多少時間開始執行任務。 如, OnUnitActiveSec=1h表示一小時執行一次任務, OnUnitActiveSec=*-*-* 02:00:00表示每天淩晨兩點執行, OnUnitActiveSec=Mon *-*-* 02:00:00表示每周一淩晨兩點執行。 |
OnBootSec | 系統啓動後,多少時間開始執行任務。 |
OnStartupSec | Systemd 進程啓動後,多少時間開始執行任務。 |
OnUnitActiveSec | 該單元上次執行後,等多少時間再次執行。 |
OnUnitInactiveSec | 定時器上次關閉後多少時間,再次執行。 |
OnCalendar | 基于絕對時間,而不是(shì)相(xiàng)對時間執行。 如, OnCalendar= OnCalendar= OnCalendar= |
AccuracySec | 如果任務必須推遲執行,推遲的最大秒數,默認是(shì) 60 秒。 |
Unit | 要執行的實際任務, 通常是(shì)同名的帶有 .service 後綴的單元。 |
Persistent | 如果設置了該字段, 即使定時器到時沒有啓動, 也會自動執行相(xiàng)應的單元。 |
WakeSystem | 如果系統休眠,是(shì)否自動喚醒系統。 |
3)定時器使用相(xiàng)關命令
操作 | 命令 |
重新加載 systemd 配置 | sudo systemctl daemon-reload |
啓動定時器 | sudo systemctl start mytask.timer |
設置定時器在啓動時自動啓動 | sudo systemctl enable mytask.timer |
查看定時器狀态 | systemctl status mytask.timer |
列出所有定時器 | systemctl list-timers |
查看日志(調試或檢查任務執行情況) | journalctl -u mytask.service |