標籤:varname word cron at anacron
一、指令碼編程知識點
1、擷取變數中字元的長度:${#VARNAME}
2、變數賦值:
a)${parameter:-word}:如果parameter為空白或未定義,則變數展開為“word”;否則,展開為parameter的值;
如:A=3
echo ${A:-30}
unset A
echo ${A:-30}
b)${parameter:+word}:如果parameter為空白或未定義,不做任何操作;否則,則展開為“word”值;
如:echo ${A:+30}
A=1
echo ${A:+30}
c)${parameter:=word}:如果parameter為空白或未定義,則變數展開為“word”,並將展開後的值賦值給parameter;
如:unset A
echo {A:=30}
d)${parameter:offset}:offest表示跳過幾個;
e)${parameter:offset:length}:截取子串,從offset處的後一個字元開始,取lenth長的子串;
如:A=‘Hello world’
echo {A:2:3}
3、指令碼設定檔
/etc/rc.d/init.d/服務指令碼,服務指令碼支援設定檔:/etc/sysconfig/服務指令碼同名的設定檔
4、變數範圍,局部變數:local VAR_NAME=
如:編輯一個指令碼,注意其中函數定義加local和不加local的區別
#!/bin/bash
#
a=1
test() {
local a=$[3+4]
}
test
for I in `seq $a 10`; do
echo $I
done
5、命令mktemp:建立臨時檔案或目錄,避免與其他檔案名稱重複
mktemp /tmp/file.XX(tmp目錄預設30天清理一次)
-d: 建立為目錄
二、訊號捕捉
1、訊號:
kill -SIGNAL PID
1: HUP
2: INT
9: KILL
15: TERM
2、指令碼中,能實現訊號捕捉,但9和15無法捕捉
Ctrl+c: SIGINT
3、訊號捕捉命令:trap
trap ‘COMMAND‘ 訊號列表
如:編輯一個指令碼,捕捉Ctrl+c訊號;
#!/bin/bash
#
trap ‘echo "You go ..."‘ INT
while :;do
date
sleep 2
done
4、一行執行多個語句,語句間用分號分隔;
指令碼執行個體:
建立指令碼ping.sh,捕捉Ctrl+c訊號。並清理指令碼運行中產生的臨時檔案。
#!/bin/bash
#
NETWORK=192.8.8.
FILE=`mktemp /tmp/file.XX`
clearup() {
echo "quit..."
rm -rf $FILE
exit 1
}
trap ‘clearup‘ INT
for I in `seq 10 200` ;do
if ping -c 1 -w 1 $NETWORK$I &> /dev/null;then
echo "$NETWORK$I is up." | tee >> $FILE
else
echo "$NETWORK$I is down."
fi
done
三、任務計劃
1、任務計劃方式:
a)在未來的某個時間點執行一次某任務;
at
batch
b)周期性地執行某任務;
cron
2、at相關
a)使用格式:
at 時間
at> COMMAND
at> Ctrl+d
b)指定時間格式:
絕對時間:HH:MM, DD.MM.YY MM/DD/YY
相對時間:now+#
單位:minutes, hours, days, weeks
模糊時間:noon, midnight, teatime
c)選項:
at -l = atq :顯示作業
at -d AT_JOB_ID = atrm AT_JOB_ID :刪除某個作業
d)/etc/at.deny和/etc/at.allow檔案
控制使用at命令的使用者
e)命令的執行結果:將以郵件的形式發送給安排任務的使用者;
3、cron相關:
cron:自身是一個不間斷啟動並執行服務,運行線上主機上。
anacron:cron的補充,能夠實現讓cron因為各種原因在過去的時間該執行而未執行的任務,在恢複正常執行一次;
a)cron:
a1)系統cron任務:定義在/etc/crontab中
格式:分鐘 小時 天 月 周 使用者 任務
a2)使用者cron任務:定義在/var/spool/cron/USERNAME中
格式:分鐘 小時 天 月 周 任務
b)時間的有效取值:
b1)分鐘:0-59
b2)小時:0-23
b3)天:1-31
b4)月:1-12
b5)周:0-7,0和7都表示周日
c)時間通配表示:
c1)*:對應的所有有效取值:
如:每小時的第三分鐘:3 * * * *
每周每小時的第三分鐘:3 * * * 7
每天的12點13分:13 12 * * *
每月6號12點13分:13 12 6 * *
每年的7月6號12點13分:13 12 6 7 *
c2),:離散時間點取值:
如:每小時的10分和40分:10,40 * * * *
每周二周五的每小時的10分40分:10,40 * * * 2,5
每周二周五的2點的10分40分:10,40 02 * * 2,5
c3)-:連續時間點:
如:每周一到周五的2點10分:10 02 * * 1-5
c4)/#:對應取值範圍內每多久一次,
如:每3分鐘一次:*/3 * * * *
每2小時:01 */2 * * *
每隔1小時:* */2 * * *
每隔一天:10 04 */2 * *
d)執行結果將以郵件形式發送給管理員;
如:只把錯誤的執行結果發送給管理員:
*/3 * * * * /bin/cat /etc/fstab > /dev/null
e)cron的環境變數:cron執行的所有命令都去PATH環境變數指定的路徑下去找,在指令碼中添加:
#!/bin/bash
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
f)使用者任務管理命令:crontab
-l:列出目前使用者的所有cron任務
-e:編輯cron任務
-r:移除所有cron任務
-u USERNAME:管理其他使用者的cron任務
g)cron服務
service crond status
chkconfig --list crond
4、anacron相關
a)/etc/anacrontab檔案欄位(最小時間單位是每天)
第一段:過去幾天未執行
第二段:開機後的第多少分鐘開始運行
第三段:表示注釋資訊
第四段:表示執行的任務
b)anacron服務預設是關閉的:
service anacron status
cron任務練習:
配置本機每隔兩天在淩晨3點20分備份一次/etc目錄,備份檔案存放至/backup/etc目錄。檔案名稱形如:etc-2012-06-20.tar.bz2
20 03 */2 * * root /bin/tar -jcf /backup/etc/etc-`date +%F`.tar.bz2 /etc/*
本文出自 “Nick Liu的博文” 部落格,請務必保留此出處http://zkhylt.blog.51cto.com/3638719/1426060