iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0

系統排程

目標

排程是一種自動化流程,讓我們可以在特定時間執行特定任務。這樣就不需要手動啟動這些任務,節省了時間和精力。在 Linux 系統中,最常用的排程工具是 cron,用於設定周期性任務。

例如,我們可以排程每天晚上 10 點自動備份文件,或者每週一早上 9 點自動更新系統。

查看系統排程

crontab 工具可以用來設定與查看系統的排程作業,除了常用的在每個使用者帳戶自己設定自己的工作外也可以設定系統排程。

  • 使用 crontab 查看目前使用者工作排程:

    student$ crontab -l
    no crontab for student
    
  • 查看系統排程

    student$ sudo cat /etc/crontab
    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    
    # For details see man 4 crontabs
    
    # Example of job definition:
    # .---------------- minute (0 - 59)
    # |  .------------- hour (0 - 23)
    # |  |  .---------- day of month (1 - 31)
    # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
    # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    # |  |  |  |  |
    # *  *  *  *  * user-name  command to be executed
    

    由以上輸出可以得知,系統排程使用 7 個欄位做設定,簡化範例如下:

    星期 執行身份 指令

    | 0 | 2 | 1 | * | * | root | /opt/bin/system-check |
    | 0 | 0 | 29 | 2 | * | root | /opt/bin/system-check |
    | 30 | 2 | * | * | 6,7 | sysop | /opt/bin/full-backup |

    每月 102:00,以 root 身份執行 /opt/bin/system-check
    每年 22900:00,以 root 身份執行 /opt/bin/system-check
    每週六日(6, 702:30,以 sysop 身份執行 /opt/bin/full-backup

    設定系統排程時,一個作業為一行。

系統排程

多數企業對於作業系統都會有統一的定期作業要執行,比如系統監控、稽核等全域式的作業,此時就很適合使用系統排程來完成。

系統排程的設定檔為 /etc/crontab,使用文字編輯器開啟後,只要新增在最後一列就可以生效。

以下設定以 root 於每分鐘將 /etc/ 目錄輸出到 /tmp/etc.txt 檔案:

  1. 使用 vi 編輯 /etc/crontab

    student$ sudo vi /etc/crontab
    
  2. 新增設定(在檔案最後面)

    ~ 以上略 ~
    
    * * * * * root (ls /etc > /tmp/etc.txt)
    

完成以上設定後,等待 1 分鐘後就會在 /tmp/ 目錄看到相關檔案:

student# ls -lh /tmp/etc.txt

使用者排程

使用者排程以使用者角度設定自己的排程作業,較系統 /etc/crontab 少一 執行身份 欄位。

使用下列範例,以 student 身份每分鐘在將時間輸出到 /tmp/systime.txt

student$ crontab -l

student$ ls -l /tmp/systime.txt
FAIL!
student$ crontab -e
* * * * * (date >> /tmp/systime.txt)

等待 1 分鐘後,查看 /tmp/systime.txt

student$ ls -l /tmp/systime.txt

student$ cat /tmp/systime.txt 
Sun Oct 23 14:59:01 CST 2022
Sun Oct 23 15:00:01 CST 2022

如果要解除以上排程中的使用者排程,只要重新使用 crontab -e 把先前加入的作業刪除就可以了。

排程記錄

排程記錄可以在 /var/log/cron 檔案中查看,不論成功或失敗都將相關資訊記錄到該檔案裡。

root# last /var/log/cron
Oct 23 14:58:14 localhost crontab[1842]: (root) END EDIT (root)
Oct 23 14:59:01 localhost CROND[1851]: (root) CMD ((date >> /tmp/systme.txt))
Oct 23 15:00:01 localhost CROND[1866]: (root) CMD ((date >> /tmp/systme.txt))
Oct 23 15:00:13 localhost crontab[1870]: (root) LIST (root)
Oct 23 15:01:01 localhost CROND[1875]: (root) CMD (run-parts /etc/cron.hourly)
Oct 23 15:01:01 localhost run-parts[1875]: (/etc/cron.hourly) starting 0anacron
Oct 23 15:01:01 localhost CROND[1884]: (root) CMD ((date >> /tmp/systme.txt))
Oct 23 15:01:01 localhost run-parts[1875]: (/etc/cron.hourly) finished 0anacron
Oct 23 15:02:01 localhost CROND[1891]: (root) CMD ((date >> /tmp/systme.txt))
Oct 23 15:03:01 localhost CROND[1896]: (root) CMD ((date >> /tmp/systme.txt))

上一篇
Day 20: NTP 網路校時
下一篇
Day 22: 檔案系統介紹
系列文
Linux 升華:初學者的探索到專家的洞察30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言