1-17-Linux中計划任務與日志的管理


本節所講內容:

1-1 Linux中的計划任務

1-1-1 at計划任務的使用

1-1-2 cron 計划任務的使用

1-1 Linux服務器的日志管理

1-1-1 日志的種類和記錄的方式

1-1-2 實戰-自定義ssh服務的日志存儲

1-1-3 擴展-日志的回滾

1-1-4 實戰-搭建rsyslog遠程日志服務器

====================================================

計划任務:在某個時段自動執行某個任務

Linux 系統中有兩條指令用於設置計划任務,at、cron

at計划任務:只執行一次,然后就沒有然后了!!!!

Usage: at [-V] [-q x] [-f file] [-mMlbv] timespec ... #使用計時器(timespec)來執行計划任務
       at [-V] [-q x] [-f file] [-mMlbv] -t time #在某個時間執行計划任務
       at -c job ...
       atq [-V] [-q x]
       at [ -rd ] job ...
       atrm [-V] job ...

       at –b

-m      Send mail to the user when the job has completed even if there was no output.#當計划任務完成(即使這個命令沒有輸出)時,向用戶發送郵件

-M      Never send mail to the user. #不發送通知

-f file Reads the job from file rather than standard input. #從文件中讀取計划任務,而不是從標准輸入中讀取

-t time run the job at time, given in the format [[CC]YY]MMDDhhmm[.ss] #在time這個時間執行計划任務,格式為 [[CC]YY]MMDDhhmm[.ss]

-l      Is an alias for atq. #atq 命令的別名

-r      Is an alias for atrm. #atrm命令的別名

-d      Is an alias for atrm.#

-b      is an alias for batch. #

-v      Shows the time the job will be executed before reading the job.

        Times displayed will be in the format "Thu Feb 20 14:50:00 1997".

-c      cats the jobs listed on the command line to standard output.

配置文件:

/var/spool/at
/var/spool/at/spool
/proc/loadavg
/var/run/utmp
/etc/at.allow
/etc/at.deny

服務:atd

開啟atd服務

[root@localhost ~]# systemctl status atd
[root@localhost ~]# systemctl restart atd
[root@localhost ~]# systemctl enable atd

image

實戰-使用at創建計划任務

[root@localhost ~]# date  #查詢當前系統時間
Tue Aug 23 23:34:26 CST 2016
[root@localhost ~]# at 23:36  #設置計划任務,在23:36分執行
at> mkdir /root/1607  #輸入要執行的命令
at> <EOT> #輸入ctrl+d退出
job 6 at Tue Aug 23 23:36:00 2016
[root@localhost ~]# at –l
#查看當前的計划任務(執行一次的)
[root@localhost ~]# atq #同上
[root@localhost ~]# at 20:00 2017-10-1 #計划任務的特殊格式(在未來的某一天)
[root@localhost ~]# at now +10min #計划任務的特殊格式(在10min后)

對於系統來說 :計划任務 就是在某個特定的時刻 執行一個腳本文件

創建成功的at計划任務會在/var/spool/at/目錄下成生一個可執行的腳本文件

/var/spool/at/*

查看/var/spool/at/*

每一個腳本都對應一個at計划任務

刪除at計划任務:

atrm 命令

atrm + 計划任務的編號

[root@localhost ~]# atrm 3 #刪除編號 是3的計划任務

[root@localhost ~]# ls /var/spool/at/ #設置成功的計划任務,會在這個目錄下生成一個文件
[root@localhost ~]# rm -rf /var/spool/at/a00007017f36d0
  #刪除其中一個文件,在查看,會發現,計划任務已取消
[root@localhost ~]# at -r 8 
#刪除計划任務命令格式
[root@localhost ~]# atrm 8 #刪除計划任務的另一個命令格式

at -l信息解析:

10    Tue Aug 23 23:50:00 2016 a root

10 –> 任務編號為10  Tue Aug 23 23:50:00 2016 --->任務執行時間(2016年8月23日星期二的23:50分) root--->執行者
image

總結:at計划任務執行一次,下次就不能再次執行

====================================================

crond是cron執行計划任務的服務,crond命令會定期檢查是否有要執行的工作,如果有,便會自動執行該工作。

cron是一個linux下的定時執行工具,可以在無需人工干預的情況下運行作業。

linux任務調度的工作主要分為以下兩類:

*系統執行的工作:系統周期性所要執行的工作,如備份系統數據、清理緩存. 例如/tmp 臨時目錄

*個人執行的工作:某個用戶定期要做的工作,由每個用戶自行設置。

啟動服務

[root@localhost ~]# systemctl status crond #查詢服務狀態
● crond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2016-08-23 22:43:37 CST; 1h 10min ago
Main PID: 1250 (crond)
   CGroup: /system.slice/crond.service
           └─1250 /usr/sbin/crond -n

Aug 23 22:43:37 localhost.localdomain systemd[1]: Started Command Scheduler.
Aug 23 22:43:37 localhost.localdomain systemd[1]: Starting Command Scheduler...
Aug 23 22:43:37 localhost.localdomain crond[1250]: (CRON) INFO (RANDOM_DELAY will be scale....)
Aug 23 22:43:37 localhost.localdomain crond[1250]: (CRON) INFO (running with inotify support)
Hint: Some lines were ellipsized, use -l to show in full.
[root@localhost ~]# systemctl restart crond #crond服務重啟
[root@localhost ~]# systemctl enable crond #crond設置開機自啟

cron命令參數介紹: (個人用戶級別)

crontab的參數:

crontab -u #指定某個用戶的cron服務;

crontab -l  #列出cron服務的詳細內容;

crontab -r #刪除cron服務;

crontab -e #編輯cron服務;

Usage:
crontab [options] file
crontab [options]
crontab -n [hostname]

Options:
 -u <user>  define user
-e         edit user's crontab
-l         list user's crontab
-r         delete user's crontab
-i         prompt before deleting
-n <host>  set host in cluster to run users' crontabs
-c         get host in cluster to run users' crontabs
-s         selinux context
-x <mask>  enable debugging

Default operation is replace, per 1003.2

例如:

crontab -u root -l # root查看自己的cron計划任務:

crontab -u san -r # root想刪除san的cron計划任務:

cron文件語法:

          分     小時    日       月       星期      命令

        0-59   0-23   1-31   1-12     0-6     command   一般一行對應一個任務

特殊符號的含義:

        "*"代表取值范圍內的數字,(任意)

        "/"代表"每",                      20/

        "-"代表從某個數字到某個數字,     6-18

        ","分開幾個離散的數字            6,18

# 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

創建計划任務

可用crontab -e命令來編輯,編輯的是/var/spool/cron下對應用戶的cron文件.

crontab的計划任務內容保存在目錄/var/spool/cron下面

[root@localhost ~]# cd /var/spool/cron/

[root@localhost cron]# ls

空的!!!

編輯計划任務

[root@localhost cron]# crontab -u root -e

5 * * * *  mkdir /ro

再次查看:

image

也可以直接在/etc/crontab中添加計划任務

cron服務每分鍾不僅要讀一次/var/spool/cron內的所有文件,還需要讀一次/etc/crontab,因此我們配置這個文件也能運用cron服務做一些事情。

用crontab配置是針對某個用戶的,而編輯/etc/crontab是針對系統的任務

編輯/etc/crontab 配置文件 (詳解)

SHELL=/bin/bash #變量的指,指定SHELL環境(次默認為bash shell)
PATH=/sbin:/bin:/usr/sbin:/usr/bin #PATH變量,指定執行的命令的程序路徑
MAILTO=root #如果出現錯誤,或者有數據輸出,數據作為郵件發給這個帳號

[root@localhost ~]# vim /etc/crontab

10 0 *   *   *  root mkdir /opt/aaa

[root@xuegod63 ~]# date

Thu Aug 25 00:10:07 CST 2016

[root@localhost ~]# ls /opt/

aaa  rh

系統級別的計划任務

對於系統級別的計划任務,需要執行的命令和腳本都放在這里:
/etc/cron.*     按兩次tab

[root@localhost ~]# ls /etc/cron

cron.d/       cron.deny     cron.monthly/ cron.weekly/ 

cron.daily/   cron.hourly/  crontab      

目錄作用解釋:

cron.d/        #是系統自動定期需要做的任務,但是又不是按小時,按天,按星期,按月來執行的,那么就放在這個目錄下面。

cron.deny     #控制用戶是否能做計划任務的文件;

cron.monthly/ #每月執行的腳本;

cron.weekly/  #每周執行的腳本;

cron.daily/    #每天執行的腳本;

cron.hourly/   #每小時執行的腳本;

crontab     #主配置文件 也可添加任務;

計划任務案例:

1. 每天晚上21:30 重啟apache

30 21 * * * /etc/init.d/httpd restart

2. 每月1、10、22日的4 : 45重啟apache。

45 4 1,10,22 * * /etc/init.d/httpd restart

3. 每月110日的4 : 45重啟apache。

45 4 1-10 * * /etc/init.d/httpd restart

4. 周一到周五每天晚上 21:15 寄一封信給 root@xuegod63:

15 21 * * 1-5  mail -s "hi" root@localhost < /etc/fstab

[root@localhost ~]# cat /var/spool/mail/root

image

anacron

cron用控制循環執行例行性工作。如果我要設定機器每早8點進行備份用服務。除非我機器保證在8點這個時間點不會關機,如果關機了,cron中的腳本,在下次開機將不會被執行。

anacron並沒有取代cron的意思,anacron用於,機器重啟后,會偵測停機期間,有沒有cron沒有執行的計划任務,如果有,會立即,執行一下沒有執行的任務。

==============================================================================

1-2  Linux系統中的日志管理

1-2-1 日志的管理

日志對於安全來說,非常重要,他記錄了系統每天發生的各種各樣的事情,你可以通過他來檢查錯誤發生的原因,或者受到攻擊時攻擊者留下的痕跡。

日志主要的功能有:審計和監測。他還可以實時的監測系統狀態,監測和追蹤侵入者等等

/var/log 存放日志的位置.

image

常用的日志文件如下:

btmp 紀錄失敗的紀錄
lastlog 紀錄最近幾次成功登錄的事件和最后一次不成功的登錄
messages 從syslog中記錄信息(有的鏈接到syslog文件)

utmp 紀錄當前登錄的每個用戶
wtmp 一個用戶每次登錄進入和退出時間的永久紀錄

/var/log/wtmp 系統登錄的情況登入登出

vim 編輯 是加密的內容

last 命令查看日志內容

哪個用戶在哪個時間通過哪種方式登錄系統的情況

清空日志文件

再次使用last查看

image

2./var/log/lastlog 最后登錄信息

lastlog 記錄所有的用戶什么時候登錄過系統

lastlog 和 last的區別

last 查看IP

lastlog 查看后門的賬號

3./var/log/btmp 用戶登錄系統的錯誤信息

lastb 查看

發現是空的

模擬使用ssh錯誤的連接本機

再次查看

會產生相應的內容

image

如果說你發現你的btmp文件變得很大,說明有很大的可能是有人在暴力破解你的主機

可使用 ll -h 查看文件的大小

1-2-2 日志的記錄方式:

分類.級別

日志的種類:

daemon 后台進程相關

kern 內核產生的信息

lpr 打印系統產生的

authpriv 安全認證

cron 定時相關

mail 郵件相關

syslog 日志服務本身的

news 新聞系統

local 0-local 7    8個系統保留的類 供其它的程序使用 /或者是用戶自定義

日志的級別: -

debug 排錯的信息

info 正常的信息

notice 注意

warn 警告

err 錯誤

crit 關鍵的錯誤

alert 警報

energ 緊急  #系統快崩潰了

日志服務

舊版本  rhel服務名稱  syslog

配置文件  /etc/syslog.conf

rhel6-7

服務名稱  rsyslog

配置文件 /etc/rsyslog.conf

編輯配置文件  vim /etc/rsyslog.conf

#kern.*    內核類型的所有級別日志存放到     /dev/console

*.info;mail.none;authpriv.none;cron.none                /var/log/messages

所有的類別 級別是info以上 除了mail,authpriv,cron (產生的日志太多,不易於查看)

類別.級別

authpriv.*      認證的信息存放                 /var/log/secure

mail.*         郵件相關的信息存放  -/var/log/maillog

cron.*         計划任相關的信息存放            /var/log/cron

local7.*        開機時顯示的信息存放-->             /var/log/boot.log

在mail.* 的指定文件前面,有個-

由於郵件的信息比較多,先將數據存儲到內存,當達到一定大小,全部寫到硬盤.有利於減少I/O進程的開銷

數據存儲在內存,如果關機不當會造成數據消失

日志輸入的規則

. info 高於info級別的信息全部記錄到某個文件

.= 級別 僅記錄等於某個級別的日志

例:.=info 只記錄info級別的日志 

.! 級別 除了某個級別意外,記錄所有的級別信息

例.!err  除了err外 記錄所有

.none 指的是排除某個類別

=============================================================================

實戰-自定義ssh服務的日志

1.編輯rsyslog配置文件

編輯文件 vim /etc/rsyslog.conf

輸入 local 0 .* /var/log/sshd.log #日志的保存路徑

image

2.定義ssh服務的日志級別

編輯sshd服務的主配置文件vim /etc/ssh/sshd_config

/定位查找 關鍵字Syslog,更改級別是local 0 ,保存退出.

SyslogFacility local0

image

3.生效配置文件

先重啟rsyslog服務(生效配置)

systemctl restart rsyslog.service

再重啟sshd服務.生成日志

systemctl restart sshd

image

4.驗證是否生成日志並查看其中的內容

查看/var/log 出現 sshd.log

查看/var/log/sshd.log內容

image

時間 主機 服務 進程ID   相關的信息

如何防止日志被heike刪除

chattr +a /var/log/sshd.log

lsattr /var/log/sshd.log

日志的回滾

在linux下的日志會定期進行回滾,

控制系統執行日志回滾操作的配置文件主要有

/etc/logrotate.conf 以及 /etc/logrotate.d/ 這個目錄下的明細配置文件。

日志是很大的,如果讓日志無限制的記錄下去 是一件很可怕的事情

日積月累 就有幾百兆 占用磁盤的空間

如果你要找出某一條可用信息à海底撈針

日志回滾原理:當日志達到某個特定的大小,我們將日志分類,之前的日志保留一個備份,再產生的日志創建一個同名的文件保存新的日志.

實戰

編輯配置文件/etc/logrotate.conf

image

weekly : 每周執行回滾

rotate : 保留4個副本

create : 創建新的文件存儲數據

單獨配置

/var/log/wtmp {        指定的日志文件

    monthly 

    create 0664 root utmp

        minsize 1M    文件超過1M進行回滾

rotate 1 回滾產生的副本

old文件

image

========================================================

實戰配置-日志回滾  在ssh日志的基礎上

編輯配置文件

[root@localhost ~]# vim /etc/logrotate.conf

wps3A23.tmp

創建數據

[root@localhost ~]# dd if=/dev/zero of=/var/log/sshd.log bs=1M count=10

[root@localhost ~]# du -sh /var/log/sshd.log

10M /var/log/sshd.log

時間設置

[root@localhost ~]# date -s 2017-01-01

Sun Jan  1 00:00:00 EST 2017

生效配置文件

[root@localhost ~]# logrotate /etc/logrotate.conf

查看備份效果

wps3A24.tmp

再次查看文件的大小 為空

wps3A25.tmp

第二種方法 執行logrotate 腳本

更改時間

[root@localhost ~]# date -s 2020-02-02

wps3A26.tmp

添加數據

[root@localhost ~]# dd if=/dev/zero of=/var/log/sshd.log bs=1M count=10

[root@localhost ~]# du -sh /var/log/sshd.log

10M /var/log/sshd.log

執行腳本

[root@localhost ~]# sh /etc/cron.daily/logrotate

驗證效果

wps3A27.tmp

=============================================================================

實戰:配置遠程日志服務器->實現日志集中的管理

server localhost(IP 192.168.171.122)

client xiaogan63.cn(IP 192.168.171.63)

第一步:server端配置

編輯 /etc/rsyslog.conf

image

UDP—>速度快—>不保證數據的完整

TCP—>可靠—>完整

使用TCP的方式

去除#號注釋

重新啟動 rsyslog

systemctl restart rsyslog

查看服務監聽的狀態

netstat -anlpt| grep 514

image

第二步:client端配置:

先ping一下服務器,看看通不通(關掉防火牆!!!)

image

vim/etc/rsyslog.conf

image

*.* 所有類別和級別的日志

@@192.168.171.122:514  服務端的IP:端口

重啟rsyslog 服務

systemctl restart rsyslog

第三步:服務端驗證

輸入如下命令:

tail -f /var/log/message  #動態的顯示到終端

image

client 重啟服務

systemctl restart atd

服務端顯示變化如下:

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM