1. 程式人生 > >Linux學習命令匯總九——任務計劃調度atd,crond及文件訪問控制列表

Linux學習命令匯總九——任務計劃調度atd,crond及文件訪問控制列表

atd crontab linux任務計劃 facl 文件訪問控制列表

本章Blog相關Linux知識點


linux 任務計劃:

一次性任務計劃命令: at ,batch ,依賴進程atd

周期性任務計劃命令:crontab ,anacron ,依賴進程crond


at,batch命令及選項


at,batch是可以處理進執行一次就結束調度的命令。不過在執行at時,必須有atd服務支持才行 。若atd默認未啟動,則at命令就會失效 。batch是利用at來進行命令的執行,系統空閑時才執行後臺任務 。

交互式:讓用戶在at> 提示符輸入多個要執行的命令

批處理:將任務的命令寫入文件由at進行調用

建議使用命令絕對路徑,使用Ctrl+d鍵提交任務

# at TIME

# at -m :當at的工作完成後,即使沒有輸出信息,依然以email方式通知該任務已完成

# at -l : 相當於atq 命令,列出目前系統上面所有at調度任務

# at -d JOBS:相當於atrm 命令,取消JOBS 調度 ,例 # at -d 1 取消第一個調度任務

# at -c job : 列出該job 的實際命令內容

# batch 不能指定時間,它自動選擇系統空閑時間執行

[root@study ~]# chkconfig --add atd     依賴atd服務
[root@study ~]# chkconfig atd on
[root@study ~]# at now +5 minutes    從現在開始第5分鐘執行
at> /bin/ls /etc/passwd
at> /bin/sync
at> /sbin/shutdown -r now    
at> <EOT>
job 5 at 2018-05-06 19:21
[root@study ~]# at -l 
5    2018-05-06 19:21 a root
3    2018-05-06 18:24 b root
[root@study ~]# at -d 3
[root@study ~]# atq
5    2018-05-06 19:21 a root
[root@study ~]# at -m
Garbled time
[root@study ~]# at -c 5
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
HOSTNAME=study.itwish.cn; export HOSTNAME
SHELL=/bin/bash; export SHELL
HISTSIZE=1000; export HISTSIZE
...
[root@study ~]# batch
at> /bin/ls /etc/issue
at> /bin/sync
at> <EOT>


mail命令及選項


mail命令,並使用Ctrl+D鍵 提交郵件

# mail 查看郵件,並使用號碼選擇要查看的郵件,使用quit退出

# mail root 向root用戶發送郵件

# mail -s “How are”root

# mail -s “Ceshi” root < /etc/passwd 指定/etc/passwd 文件作為發送root用戶的郵件內容

[root@study ~]# yum install mailx -y   安裝mailx郵件
[root@study ~]# mail      查看郵件
Heirloom Mail version 12.4 7/29/08.  Type ? for help.
"/var/spool/mail/root": 2 messages 2 new
>N  1 root                  Tue May  8 09:42  38/1511  "ces"
 N  2 root                  Tue May  8 09:43  18/583   "ces"
& 1    輸入郵件號查看郵件內容
Message  1:
From [email protected]  Tue May  8 09:42:50 2018
Return-Path: <[email protected]>
X-Original-To: root
Delivered-To: [email protected]
Date: Tue, 08 May 2018 09:42:50 +0800
To: [email protected]
Subject: ces
User-Agent: Heirloom mailx 12.4 7/29/08
Content-Type: text/plain; charset=us-ascii
From: [email protected] (root)
Status: R

how are

& 2
Message  2:
From [email protected]  Tue May  8 09:43:05 2018
Return-Path: <[email protected]>
X-Original-To: root
Delivered-To: [email protected]
Date: Tue, 08 May 2018 09:43:05 +0800
To: [email protected]
Subject: ces 
User-Agent: Heirloom mailx 12.4 7/29/08
Content-Type: text/plain; charset=us-ascii
From: [email protected] (root)
Status: R

how are you ?

& quit   退出


crontab ,anacron命令及選項


周期性任務:cron ,

# yum install crontabs -y 安裝crond 進程及crontab 命令

建議命令寫全路徑 ,日誌目錄為 /var/log/cron

cron任務命令依賴於crond進程 ,crond:守護進程,運行在後臺,隨時監聽著進程等待執行家目錄,主目錄 home directory

系統cron:

# chkconfig crond on 配置開機運行crond 進程

# service crond start 啟動crond進程

# service crond status 查看crond進行是否運行

# ps -aux | grep crond 查看運行中是否包含crond 進程

配置文件: /etc/crontab

[root@bogon ~]# 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

選項: 分鐘 小時 天 月 周 用戶 命令

註意:添加用戶名稱

例: */1 * * * * root /bin/echo "hello word" 表示每分鐘root 用戶執行/bin/echo "hello word" 語句

01 00 * * 1 root /etc/rc.d/init.d/httpd restart 表示每周一的0點1分root用戶執行 httpd 重啟服務

時間表示法:

1、每個時間位都應該使用其可用的有效範圍的值

2、某時間位上的*表示對應位的所有的有效取值

3、 - 表示連續的時間點取值 ,如 30-35

4、 , 表示離散的時間點取值 ,如 3 ,5

5、 */# 表示在指定的時間範圍內每隔# 執行一次 ,如 */2 * * * * /bin/echo "hello word" &> /dev/null 表示每隔2分鐘輸出語句“hello word”,通過輸出重定向而避免接收郵件

用戶cron:

使用crontab命令來實現,配置文件 /etc/spool/cron/ 目錄中以登錄名命名的文件

# crontab -l 查看自己的crontab任務列表

# crontab -e 通過editor 變量中定義的編輯器打開自己的cron配置文件,編輯單獨的任務都是用-e 選項,無論是刪除還是新建

# crontab -r 移除crontab文件

如果是管理員 # crontab -u username 為username用戶指定crontab作業 ,例 :crontab -e -u docker 為用戶docker 指定crontab作業

anacron :最小刻度是天 ,是crontab的補充,用於檢查crontab中某任務在過去一個周期是否沒有執行;如果沒有執行,則在開機以後的某個時間點讓其執行一次,無論其周期是否到達

[root@study ~]# vi /etc/crontab 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# 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
*/1 * * * * root /bin/echo "hello word"
42 15 * * * root /etc/rc.d/init.d/httpd restart
[root@study ~]# tail -f /var/log/cron   查看cron日誌
May  8 15:42:01 study crond[1361]: (*system*) RELOAD (/etc/crontab)
May  8 15:42:01 study CROND[1756]: (root) CMD (/bin/echo "hello word")
May  8 15:42:01 study CROND[1757]: (root) CMD (/etc/rc.d/init.d/httpd restart)
[root@study ~]# mail   查看郵件確認
Heirloom Mail version 12.4 7/29/08.  Type ? for help.
>N 1 Cron Daemon           Tue May  8 15:42  23/775   "Cron <root@study> /bin/echo "hello word""
 N 2 Cron Daemon           Tue May  8 15:42  24/824   "Cron <root@study> /etc/rc.d/init.d/httpd restart"
[root@study ~]# crontab -e     為登錄用戶配置cron 任務
no crontab for root - using an empty one
*/1 * * * *  /bin/ls /etc/passwd
[root@study ~]# crontab -l
*/1 * * * *  /bin/ls /etc/passwd
[root@study ~]# crontab -u docker -e   為用戶docker 指定cron任務 
no crontab for docker - using an empty one
*/1 * * * *  /bin/cat /etc/passwd
[root@study ~]# crontab -l
*/1 * * * *  /bin/ls /etc/passwd
[root@study ~]# crontab -r   刪除本用戶cron任務
[root@study ~]# crontab -u docker -l
*/1 * * * *  /bin/cat /etc/passwd
[root@study ~]# crontab -u docker -r 
[root@study ~]# cd /var/spool/cron/  查看/var/spool/cron/目錄,確認那個用戶存在cron任務 
[root@study cron]# ls


文件訪問控制列表facl


FACL:Filesystem Acess Control List

Linux(和其他Unix等POSIX兼容的操作系統)有一種被稱為訪問控制列表(ACL)的權限控制方法,它是一種權限分配之外的普遍範式。例 如,默認情況下你需要確認3個權限組:owner、group和other。而使用ACL,利用文件擴展屬性保存額外的訪問控制權限,你可以增加權限或其他用戶或組別。可以允許指定的用戶A、B、C擁有寫權限而不再是讓他們整個組擁有寫權限。

# setfacl 設定facl權限
  -m: 設定權限
    [u|g]:UID:perm

    d:[u|g]:UID:perm 繼承父目錄facl權限

    m::perm
  -x:取消facl權限
    [u|g]:UID

m:

  -R: 為某一個目錄設置默認的訪問控制列表。意味著在這個目錄下的文件將自動繼承目錄的訪問控制列表權限。

# setfacl -m u:hadoop:rw inittab 配置文件inittab對用戶hadoop具有讀寫權限

# setfacl -x u:hadoop inittab 取消facl 權限

[root@study root]## yum install acl   安裝acl 功能
[root@study root]# vi /etc/fstab 
....
/dev/mapper/vg0-home    /home       ext4    defaults,acl       1 2       激活磁盤分區ACL功能
....
[root@study ~]#  mount -o remount /home  重新掛載/home分區 
[root@study ~]# useradd hadoop
[root@study ~]# useradd docker
[root@study ~]# cd /home
[root@study home]# setfacl -m u:docker:rw ./a.txt 
[root@study home]# setfacl -m u:hadoop:rw ./a.txt 
[root@study home]# getfacl a.txt 
# file: a.txt
# owner: root
# group: root
user::rw-
user:hadoop:rw-
user:docker:rw-
group::r--
mask::rw-
other::r--

[root@study home]# cat /etc/issue > a.txt
[root@study home]# su - docker
[docker@study ~]$ vi /home/a.txt 
CentOS release 6.9 (Final)
Kernel \r on an \m


本章知識點匯總


# chkconfig atd on 在2-5級別下開機自動啟動該進程

# chkconfig crond on 開機啟動crond進程服務

# chconfig postfix on 開機啟動postfix郵件進程服務

# service atd start 啟動atd進程服務

# service crond start 啟動crond服務

# service postfix start 啟動郵件服務

# at TIME 執行一次性任務調度

# atq 查詢at 任務 ,相當於 # at -l

# atr 刪除at任務 ,相當於# at -d

# mail -s “Subject” Username 發送主題為Subject的郵件到Username用戶

# crontab -r 刪除本用戶的crontab任務

# crontab -l -u Username 顯示Username用戶的任務列表

# crontab -e 編輯本用戶的crontab任務

# setfacl -m [u|g]:Username:Permis Filename 添加FACL 功能

# setfacl -x [u|g]:Username:Permis Filename 取消FACL 功能



Linux學習命令匯總九——任務計劃調度atd,crond及文件訪問控制列表