Linux 伺服器系統管理第七章 行程管理  上一頁    下一頁

7-4 指定行程執行

內容:

  • 7-4-1 指定行程服務 - atd

  • 7-4-2 指定行程命令 - at

  • 7-4-3 刪除指定行程 - atrm

  • 7-4-4 批次處理 - batch

一般使用者可利用 at 命令指定行程的執行時間,也可利用 batch 建立一個批次行程,以下將分別介紹之。

7-4-1 指定行程 服務 - atd

首先必須先觀察指定行程服務 atd 是否啟動,測試如下:(執行 # systemctl status atd 命令,如沒啟動則鍵入 #system start atd 命令)

# systemctl  status  atd   [執行命令]

atd.service - Job spooling tools

   Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)

   Active: active (running) since 2017-02-07 08:48:44 CST; 1min 31s ago

 Main PID: 998 (atd)

   CGroup: /system.slice/atd.service

           └─998 /usr/sbin/atd -f

使用者可以由鍵盤上輸入某命令,並指定某一時間來執行該命令,相關命令有:

  • at指定某一時間執行某一命令(程序)。

  • batch批次行程。可指定多個命令同時執行。

  • atq列出使用者所下的 at 命令。

  • atrm刪除 at 所下的命令。

並非任何人都可以指定命令執行,而是必須經由系統管理者授權才行,有兩個檔案可以管理使用者執行 at 命令:

  • /etc/at.allow:該檔案內儲存允許執行 at 命令的使用者名稱。

  • /etc/at.deny:該檔案內儲存不允許執行 at 命令的使用者名稱。

乍看之下,似乎兩個檔案互有相衝突,其實並非兩個檔案都必須同時存在。若是系統上兩個檔案都不存在的話,表示系統沒有設限,任何人都可以下 at 命令。另外,只有在 at.allow 存在時,編寫該檔案的使用者才可以執行 at 命令,其他使用者則無權執行;反之若存在 at.deny 表示僅該檔案內的使用者不可以執行 at 命令,其他使用者都可以執行。由此可見,allow 機制是採用較嚴謹的管理方式,而 deny 則較寬鬆。至於系統到底要採用哪一種管理方式,這可視環境因素再由管理者(root)自行制定。若是兩個檔案都存在,一般系統可能只會用到較寬鬆的 deny 檔案內容。若當執行 at 命令而所設定的時間還未到,則系統會將所預備執行的命令儲存於:

  • /var/spool/at/spool 目錄內

at 的命令格式如下:

$ at [-V] [-q queue] [-f file] [-mldbv] TIME

$ at -c job [job...]

常用選項有:

  • -V :印出版本號碼。

  • -q queue:使用某一執行佇列(Queue)。

  • -f file:讀入執行命令檔案。

  • -l :同 atq 功能。

  • -d :同 atrm 功能。

  • -v :顯示執行時間。

  • TIME:指定時間,格式有:

    • HH:MM:指定下達命令當天的時與分,如 17:30 1730

    • HH:MM MM/DD/YY:指定執行命令的年、月、日、時、分,如 17:30 11/12/2004,其中日期也可以 MMDDYY DD.MM.YY 表示。

    • 1am  tomorrow:明天早上 1 點。

    • now + count time-units:現在時間以後的時(hours)、分(minutes)、日(days)、星期(weeks)。

  • -c :顯示 at 所下達的命令。

以下用幾種操作模式來介紹 at 命令的使用方法,如下:

7-4-2 指定行程命令 - at

(A) 指定行程操作

直接設定某一特定時間,執行一序列的命令或程式,範例如下:

$ date                    [查閱目前時間,上午 10:38]

  2  6 10:38:42 CST 2017

$ at 10:42                 [指定執行時間,上午 10:42]

at> cp /etc/passwd  /home/student01/at_file     [輸入執行命令]

at> ^D                    [結束輸入命令]

[1]+  Stopped                 at 10:42

$ at -l                     [查閱所建立行程]

1       Mon Feb  6 10:42:00 2017 a student01

$ atq                      [查閱所建立行程]

1       Mon Feb  6 10:42:00 2017 a student01

$at  –c  1                  [查閱行程內容]

#!/bin/sh

# atrun uid=1000 gid=1000

# mail student01 0

umask 2

XDG_SESSION_ID=1; export XDG_SESSION_ID

HOSTNAME=serCourse; export HOSTNAME

SELINUX_ROLE_REQUESTED=; export SELINUX_ROLE_REQUESTED

SHELL=/bin/bash; export SHELL

HISTSIZE=1000; export HISTSIZE

SSH_CLIENT=120.118.165.107\ 49481\ 22; export SSH_CLIENT

….

命令 # at 10:40am 表示指定當天早上 10 40 分執行命令。下達命令後,首先系統會出現詢問是要在哪一個 Shell 環境執行命令,內定值是原來登入的 Shell 環境(/bin/sh);接著系統出現 at> 提示符號,使用者可以連續輸入所欲執行的命令或程式;輸入完成,則鍵入『Ctrl +d』(按住 Ctrl 鍵再按入 d 鍵)來停止輸入(將出現 a t>?),並將所設定的命令存入 spool 排序器內。輸入完命令之後,可利用 # at –l # atq 觀察執行後的結果。值得注意的是,at 所指定的命令,一旦時間到達並且已執行完畢,該命令集將由佇列排序器(spool)移除,且不再出現;另外所設定的時間不可以與目前時間太過接近,否則可能會永遠執行不到,這是分時系統所可能出現的問題。

(B) 顯示指定行程

當使用者輸入 at 命令之後,系統會記錄所欲執行批次檔案的時間,並以佇列編號表示;如欲刪除某一at 批次(atrm 命令)命令的話,也需指定一個佇列編號,操作範例如下:

$ at  -l          [顯示指定行程]

81      2005-10-08 15:00 a tsnien

31      2005-05-25 11:32 a tsnien

7-4-3 刪除指定行程 - atrm

可利用 atrm 刪除行程,操作範例如下:

$ atrm  31     [刪除指定行程]

$ at -l

81      2005-10-08 15:00 a tsnien

7-4-4 批次處理 – batch

其實 batch 命令格式與 at 幾乎相同,唯一不同的是 batch 可選擇是否指定時間,而 at 命令一定要指定時間,但兩者所產生的都是一個批次命令(包含一連串序列的命令)。如 batch 沒有指定時間的話,則會自動利用主機較空閒的時機來執行該批次檔案。命令格式如下:

$ batch [-V] [-q queue] [-f file] [-mv] [TIME]

操作範例如下:(與 at 命令相同,不再另述)

$ batch

warning: commands will be executed using (in order) a) $SHELL b) login shell c)

/bin/sh

at> cp file_21 file_22

at> rm file_21

at> ?

[2]+  Stopped                 batch

$ at  -l

5       2004-11-12 09:23 b tsnien

 

翻轉工作室:粘添壽

 

Linux 伺服器系統管理 - CentOS:

 

 

 

翻轉電子書系列: