Hi,您好,歡迎來到西安天任軟件科技有限責任公司!

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=*-*-* *:*:00 表示每分鍾觸發一次定時器執行,

OnCalendar=*-10-15 00:00:00 表示每年的10月11号執行,

OnCalendar=*-*-* 01:00:00 表示每天淩晨 1 點觸發執行。

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

上一篇:C++性能優化大局觀
下一篇:2024 年的 Rust 與 Go,看完你悟了嗎(ma)?