一、任務計劃
未來的某時間點執行一次任務:
at:在指定的時間執行任務
batch:系統自行選擇空閑時間去執行此處指定的任務
周期性運行某任務:
cron:在指定的時間執行任務
1、at任務
at [option] TIME
常用選項:
-V:顯示版本信息:
-l: 列出指定隊列中等待運行的作業;相當于atq
-d: 刪除指定的作業;相當于atrm
-c: 查看具體作業任務
-f /path/from/somefile:從指定的文件中讀取任務
-m:當任務被完成之后,將給用戶發送郵件,即使沒有標準輸出
注意:作業執行命令的結果中的標準輸出和錯誤以郵件通知給相關用戶
TIME:定義出什么時候進行at這項任務的時間
HH:MM [YYYY-mm-dd]
now + #{minutes,hours,days, OR weeks}
noon, midnight, teatime(4pm),tomorrow
at時間格式
HH:MM 02:00
在今日的HH:MM 進行,若該時刻已過,則明天此時執行任務
HH:MM YYYY-MM-DD 04:00 2016-09-20
HH:MM[am|pm] [Month] [Date] 04pm March 17
規定在某年某月的某一天的特殊時刻進行該項任務
HH:MM[am|pm] + number [minutes|hours|days|weeks] now + 5 minutes 04pm + 3 days
在某個時間點再加幾個時間后才進行該項任務
執行方式:
1)交互式
2)輸入重定向
3)at -f 文件
依賴與atd服務,需要啟動才能實現at任務,啟動atd服務
centos6:service atd start
centos7:systemctl start atd
at隊列存放在/var/spool/at目錄中
使用條件參考配置文件/etc/at.{allow,deny}控制用戶是否能執行at任務
先尋找/etc/at.allow文件,文件中的使用者才能使用at ,沒有在這個文件中的使用者則不能使用at(即使沒有寫在at.deny 當中)
如果/etc/at.allow不存在,就尋找/etc/at.deny 這個文件,若寫在這個at.deny 的使用者則不能使用at,而沒有在這個at.deny文件中的使用者則可使用at命令。
如果兩個文件都不存在,只有root可以使用at這個命令。
2、周期性任務計劃:cron
相關的程序包:
cronie: 主程序包,提供crond守護進程及相關輔助工具
cronie-anacron:cronie的補充程序;用于監控cronie任務執行狀況;如cronie中的任務在過去該運行的時間點未能正常運行,則anacron會隨
后啟動一次此任務
crontabs:包含CentOS提供系統維護任務
確保crond守護處于運行狀態:
CentOS 7:systemctl status crond
CentOS 6:service crond status
計劃周期性執行的任務提交給crond,到指定時間會自動運行,日志:/var/log/cron
系統cron任務:系統維護作業,/etc/crontab
用戶cron任務:crontab命令,/var/spool/cron/USERNAME
系統cron任務:/etc/crontab
注釋行以# 開頭
詳情參見man 5 crontab
# 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
例如:晚上9點10分運行echo命令;
10 21 * * *centos /bin/echo "Howdy!"
計劃任務
時間表示法:
(1) 特定值;給定時間點有效取值范圍內的值
(2) * 給定時間點上有效取值范圍內的所有值,表示“每…”
(3) 離散取值:#,#,#
(4) 連續取值:- #-#
(5) 在指定時間范圍上,定義步長:/#: #即為步長
例如:每3小時echo命令;
0 */3 * * * centos /bin/echo "howdy!"
時間格式
@reboot Run once after reboot.
@yearly 0 0 1 1 *
@annually 0 0 1 1 *
@monthly 0 0 1 * *
@weekly 0 0 * * 0
@daily 0 0 * * *
@hourly 0 * * * *
系統的計劃任務:
/etc/crontab 配置文件
/etc/cron.d/ 腳本目錄
/etc/cron.hourly/ 每時腳本
/etc/cron.daily/ 每天腳本
/etc/cron.weekly/ 每周腳本
/etc/cron.monthly/ 每月腳本
anacron系統
運行計算機關機時cron不運行的任務,CentOS6.0以后版本取消anacron服務,由crond服務管理。
假設計算機沒有一直開機
對筆記本電腦、臺式機、工作站及其它不一直開機的系統很重要
對偶爾要關機的服務器很有用
配置文件:/etc/anacrontab,負責執行/etc/ cron.daily /etc/cron.weekly /etc/cron.monthly中系統任務,/etc/cron.hourly/由/cron.d/0hourly執行。
字段1:如果在這些日子里沒有運行這些任務……
字段2:在重新引導后等待這么多分鐘后運行它
字段3:任務識別器,在日志文件中標識
字段4:要執行的任務
當執行任務時,更新/var/spool/anacron/文件時間戳
清除臨時文件
rhel6.0使用/etc/cron.daily/tmpwatch定時清除臨時文件。
rhel7.0使用systemd-tmpfiles-setup服務實現
配置文件:
/etc/tmpfiles.d/*.conf
/run/tmpfiles.d/*.conf
/usr/lib/tmpfiles/*.conf
/usr/lib/tmpfiles.d/tmp.conf
d /tmp 1777 root root 10d
d /var/tmp 1777 root root 30d
命令:
systemd-tmpfiles –clean|remove|create configfile
計劃任務
用戶cron:
crontab命令定義,每個用戶都有專用的cron任務文件:/var/spool/cron/USERNAME
crontab命令:
crontab[-u user] [-l | -r | -e] [-i]
-l: 列出所有任務;
-e: 編輯任務;
-r: 移除所有任務;
-i:同-r一同使用,以交互式模式移除指定任務
-u user: 僅root可運行,指定用戶管理cron任務
控制用戶執行計劃任務:/etc/cron.{allow,deny}
at和crontab
一次性作業使用at
重復性作業使用crontab
Create at time crontab -e
List at -l crontab -l
Details at -c jobnum N/A
Remove at -d jobnum crontab -r
Edit N/A crontab -e
沒有被重定向的輸出會被郵寄給用戶
根用戶能夠修改其它用戶的作業
計劃任務
注意:運行結果的標準輸出和錯誤以郵件通知給相關用戶
(1) COMMAND > /dev/null
(2) COMMAND &> /dev/null
對于cron任務來講,%有特殊用途;如果在命令中要使用%,則需要使用\轉義
計劃任務
思考:
(1) 如何在秒級別運行任務?
* * * * * for min in 0 1 2 ; do echo "hi"; sleep 20; done 每分鐘60秒,每次相隔20秒,所以有三組,0 1 2
(2) 如何實現每7分鐘運行一次任務?
sleep NUMBER [SUFFIX]…
SUFFIX:
s: 秒, 默認
m: 分
h: 小時
d: 天
練習
1、每4小時備份并壓縮一次/etc目錄至/backup目錄中,保存的文件名稱格式為“etc-yyyy-mm-dd-HH.tar.xz”
corntab -e
0 */4 * * * /usr/bin/cp -a /etc/ /backup/etc-`date +\%F-\%H`.tar.xz
二、系統啟動流程
Linux組成: kernel + rootfs
kernel: 進程管理、內存管理、網絡管理、驅動程序、文件系統、安全功能
rootfs:程序和glibc
庫:函數集合, function, 調用接口(頭文件負責描述)
過程調用:procedure,無返回值
函數調用:function
程序:二進制執行文件
內核設計流派:
單內核(monolithic kernel):Linux 把所有功能集成于同一個程序
微內核(micro kernel):Windows, Solaris 每種功能使用一個單獨子系統實現
Linux內核特點:
支持模塊化:.ko(kernel object)
如:文件系統,硬件驅動,網絡協議等
支持內核模塊的動態裝載和卸載
組成部分:
核心文件:/boot/vmlinuz-VERSION-release
ramdisk:輔助的偽根系統
CentOS 5: /boot/initrd-VERSION-release.img
CentOS 6,7: /boot/initramfs-VERSION-release.img
模塊文件:/lib/modules/VERSION-release
centos6啟動流程
1.加載BIOS的硬件信息,獲取第一個啟動設備。
2.讀取第一個啟動設備MBR的引導加載程序(grub)的啟動信息
3.加載核心操作系統的核心信息,核心開始解壓縮,并嘗試驅動所有的硬件設備。
4.核型執行init程序并獲取運行信息。
5.Init執行/etc/rc.d/rc.sysinit文件。
6.啟動核心的外掛模塊(/etc/modprobe.conf)。
7.Init執行運行的各個批處理文件(scripts).
8.Init執行/etc/rc.d/rc.local.
9.執行/bin/login程序,等待用戶登錄。
10.登錄之后開始以Shell控制主機。
1、POST:Power-On-Self-Test,加電自檢,是BIOS功能的一個主要部分。負責完成對CPU、主板、內存、硬盤子系統、顯示子系統、串并行接口、鍵盤、CD-ROM光驅等硬件情況的檢測。
2、ROM:BIOS,Basic Input and Output System,保存著有關計算機系統最重要的基本輸入輸出程序,系統信息設置、開機加電自檢程序和系統啟動自舉程序等。
RAM:CMOS互補金屬氧化物半導體,保存各項參數的設定。按次序查找引導設備,第一個有引導程序的設備為本次啟動設備
3、bootloader: 引導加載器,引導程序
windows: ntloader,僅是啟動OS
Linux:功能豐富,提供菜單,允許用戶選擇要啟動系統或不同的內核版本;把用戶選定的內核裝載到內存中的特定空間中,解壓、展開,并把系統控制權移交給內核
LILO:LInuxLOader
GRUB: GRand Unified Bootloader
CENTOS 5,6:GRUB 0.X(GRUB Legacy)
CENTOS 7:GRUB 2.X(GRUB2)
MBR:(446: bootloader),(64: 分區表), (2: 55AA)
GRUB:
primary boot loader : 1st stage,1.5 stage
secondary boot loader :2nd stage,分區文件
4、ramdisk:
內核中的特性之一:使用緩沖和緩存來加速對磁盤上的文件訪問
ramdisk–> ramfs提高速度
CentOS 5: initrd, 工具程序:mkinitrd
CentOS 6: initramfs,工具程序:mkinitrd, dracut
5、kernel自身初始化:
探測可識別到的所有硬件設備
加載硬件驅動程序(可能借助于ramdisk加載驅動)
以只讀方式掛載根文件系統
運行用戶空間的第一個應用程序:/sbin/init
init程序的類型:
CentOS 5:SysV: init,配置文件:/etc/inittab
CentOS 6:Upstart: init,配置文件:/etc/inittab, /etc/init/*.conf
CentOS 7:Systemd:systemd, 配置文件:/usr/lib/systemd/system,/etc/systemd/system
系統初始化:POST –> BootSequence(BIOS) –> Bootloader(MBR) –> kernel(ramdisk) –> rootfs(只讀) –> init(systemd)
CentOS6之前,/sbin/init
運行級別:為系統運行或維護等目的而設定;0-6:7個級別
0:關機
1:單用戶模式(root自動登錄), single, 維護模式
2: 多用戶模式,啟動網絡功能,但不會啟動NFS(可以自行啟動);維護模式
3:多用戶模式,正常模式;文本界面
4:預留級別;可同3級別
5:多用戶模式,正常模式;圖形界面
6:重啟
默認級別:3, 5
切換級別:init #
查看級別:runlevel; who -r
init讀取其初始化文件:/etc/inittab
初始運行級別(RUN LEVEL)
系統初始化腳本
對應運行級別的腳本目錄
捕獲某個關鍵字順序
定義UPS電源終端/恢復腳本
在虛擬控制臺生成getty
在運行級別5初始化X
CentOS5的inittab文件:/etc/inittab
每一行定義一種action以及與之對應的process
id:runlevel:action:process
action:
wait: 切換至此級別運行一次
respawn:此process終止,就重新啟動之
initdefault:設定默認運行級別;process省略
sysinit:設定系統初始化方式,此處一般為指定 /etc/rc.d/rc.sysinit
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
id:3:initdefault: 設置系統默認的運行級別
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc0
l1:1:wait:/etc/rc.d/rc1…
l6:6:wait:/etc/rc.d/rc6
CentOS6的inittab文件/etc/inittab
id:3:initdefault: 設置系統默認的運行級別
/etc/init/control-alt-delete.conf
/etc/init/tty.conf
/etc/init/start-ttys.conf
/etc/init/rc.conf
/etc/init/prefdm.conf
/etc/rc.d/rc.sysinit: 系統初始化腳本
(1) 設置主機名
(2) 設置歡迎信息
(3) 激活udev和selinux
(4) 掛載/etc/fstab文件中定義的文件系統
(5) 檢測根文件系統,并以讀寫方式重新掛載根文件系統
(6) 設置系統時鐘
(7) 激活swap設備
(8) 根據/etc/sysctl.conf文件設置內核參數
(9) 激活lvm及software raid設備
(10) 加載額外設備的驅動程序
(11) 清理操作
說明:rcN –> 意味著讀取/etc/rc.d/rcN.d/
K*: K##*:##運行次序;數字越小,越先運行;數字越小的服務,通常為依賴到別的服務
S*: S##*:##運行次序;數字越小,越先運行;數字越小的服務,通常為被依賴到的服務
注:通常啟動次序越小,關閉次序越大
for srvin /etc/rc.d/rcN.d/K*; do
$srvstop
done
for srvin /etc/rc.d/rcN.d/S*; do
$srvstart
done
1、chkconfig
(1)添加:
chkconfig –add name
SysV的服務腳本放置于/etc/rc.d/init.d(/etc/init.d)
腳本首部信息
#!/bin/bash
#chkconfig: LLLL nn ## LLLL 默自啟級別,-表示都不啟動; nn 啟動次序; ## 關閉次序
#description centos5之前必須有,之后可沒有
(2)刪除:
chkconfig –del name
(3)修改指定的鏈接類型:
chkconfig [–level levels] name <on|off|reset>
–level LLLL: 指定要設置的級別,省略時表示2345
(4)查看服務在所有級別的啟動或關閉設定情形,沒有指明服務時顯示所有服務的信息
chkconfig –list [name]
2、ntsysv 交互式設置服務的啟動或關閉設定,默認設置當前級別
–level=LLLL name
3、xinetd管理的服務:非獨立服務
瞬態(Transient)服務被xinetd進程所管理
進入的請求首先被xinetd代理
配置文件:/etc/xinetd.conf、/etc/xinetd.d/<service>
與libwrap.so文件鏈接
用chkconfig控制的服務:
chkconfig tftp on
4、service 服務 start|stop|restart
service –status-all
注意:
正常級別下,最后啟動一個服務S99local沒有鏈接至/etc/rc.d/init.d一個服務腳本,而是指向了/etc/rc.d/rc.local腳本
不便或不需寫為服務腳本放置于/etc/rc.d/init.d/目錄,且又想開機時自動運行的命令,可直接放置于/etc/rc.d/rc.local文件中
/etc/rc.d/rc.local在指定運行級別腳本后運行
可以根據情況,進行自定義修改
啟動流程
1:2345:respawn:/usr/sbin/mingettytty1
2:2345:respawn:/usr/sbin/mingettytty2
…
6:2345:respawn:/usr/sbin/mingettytty6
mingetty會自動調用login程序
x:5:respawn:/etc/X11/prefdm -nodaemon
CentOS 6 init程序為: upstart, 其配置文件:/etc/inittab, /etc/init/*.conf,配置文件的語法遵循upstart配置文件語法格式,和CentOS5不同
CentOS 6啟動流程:
POST –> Boot Sequence(BIOS) –> Boot Loader –> Kernel(ramdisk) –> rootfs–> switchroot–> /sbin/init–>(/etc/inittab, /etc/init/*.conf) –> 設定默認運行級別–> 系統初始化腳本rc.sysinit–> 關閉或啟動對應級別的服務–> 啟動終端
作業:
1、每周2, 4, 7備份/var/log/messages文件至/logs目錄中,文件名形如“messages-yyyymmdd”
crontab -e
0 0 * * 2,4,7 /bin/cp -a /var/log/messages /logs/messages-`date +\%Y\%m\%d`
2、每兩小時取出當前系統/proc/meminfo文件中以S或M開頭的信息追加至/tmp/meminfo.txt文件中
crontab -e
0 */2 * * * cat /proc/meminfo | egrep '^(S|M)' &>> /tmp/meminfo
3、centos6 啟動流程
POST –> Boot Sequence(BIOS) –> Boot Loader –>
Kernel(ramdisk) –> rootfs–> switchroot–>
/sbin/init–>(/etc/inittab, /etc/init/*.conf) –> 設定默認運行級別–>
系統初始化腳本rc.sysinit–> 關閉或啟動對應級別的服務–> 啟動終端
4、centos5,6 添加腳本服務
vim /etc/rc.d/init.d/service
#!/bin/bash
#chkconfig: 2345 77 33
#description:
read -p "please input a select (start|stop|restart|status):" sel
case $sel in
start)
echo start
;;
stop)
echo stop
;;
restart)
echo restart
;;
status)
echo status
*)
echo not exits
;;
esac
chkconfig –add name
5、centos5,6 口令破解
敲任意鍵顯示開機菜單,輸入a選擇本次開機進入的運行級別,輸入1 s S single,回車啟動
系統為多內核時:敲任意鍵顯示開機菜單,在欲啟動的內核上輸入e進行編輯,在kernerl所在行輸入e進行編輯,輸入1或s或S或single,回車,按b啟動
原創文章,作者:anonymous,如若轉載,請注明出處:http://www.www58058.com/45924