计划任务日志
  0C74k909wmgc 2023年11月02日 34 0

计划任务:

Linux下面,计划在未来的某一个时刻去执行的任务。

分为两种:一次性的计划任务和周期性的计划任务

一次性的计划任务:at服务,依赖于后台atd进程。

周期性的计划任务:cron服务,依赖于后台crond进程。


at:

1、确认at程序是否安装

# rpm -q at

at-3.1.10-43.el6_2.1.x86_64

# rpm -ql at

/etc/at.deny 用户拒绝列表 /etc/at.allow(默认没有,允许列表)

/etc/pam.d/atd 验证机制

/etc/rc.d/init.d/atd 服务启动脚本

/etc/sysconfig/atd 配置文件

/usr/bin/at 制定一次性的计划任务

/usr/bin/atq 查看

/usr/bin/atrm 删除

/usr/bin/batch 优先级

/usr/sbin/atd 二进制命令

/var/spool/at 存放计划任务文件

2、确认服务是否启动(atd)

# service atd status

atd (pid  5474) is running...

3、通过命令制定一次性的计划任务

命令:

at:

-c:查看计划任务内容

-d:删除计划任务 atrm

-l:列出计划任务

-f:指定文件

man at

时间格式:

at now +1min

at 3:30pm tomorrow

at 15:30

at 07261010

at -t 202010101010


demo1:

# at now +2min

at> echo hello world >/tmp/test.log

at> echo 999 >>/tmp/test.log

at> <EOT> ctrl+d 结束输入

job 1 at 2016-07-25 10:18

# atq

1 2016-07-25 10:18 a root

# at -c 1

....

echo hello world >/tmp/test.log

echo 999 >>/tmp/test.log


demo2:在2分钟以后批量添加2个用户


vim /root/useradd.sh

#!/bin/bash

for i in {1..3}

 do

  useradd stu$i

 done

echo user is ok >>/tmp/test.log


# chmod +x useradd.sh


# at now +1min -f /root/useradd.sh


at服务的用户控制:

/etc/at.deny 拒绝列表

/etc/at.allow 允许列表

1、默认情况下,允许任何人使用at服务

2、如果有at.allow文件,那么只允许在at.allow文件里的人使用;如果at.allow和at.deny冲突,allow优先



周期性的计划任务:cron服务

1、确认cron服务是否安装

# rpm -q cronie

cronie-1.4.4-12.el6.x86_64

# rpm -q crontabs

crontabs-1.10-33.el6.noarch


# rpm -ql cronie|grep etc

/etc/cron.d cron服务的相关目录,存放除了每天/每周/每月以外的计划任务

/etc/cron.d/0hourly 系统每小时需要执行的计划任务

/etc/cron.deny 用户拒绝列表 cron.allow(默认没有,允许)

/etc/pam.d/crond  验证机制

/etc/rc.d/init.d/crond 启动脚本

/etc/sysconfig/crond 配置文件


# rpm -ql crontabs|grep etc

/etc/cron.daily 系统每天需要执行的计划任务

/etc/cron.hourly 每小时

/etc/cron.monthly 每月

/etc/cron.weekly 每周

/etc/crontab 制定系统计划任务的文件


2、确认cron服务是否启动

# /etc/init.d/crond status

crond (pid  2142) is running...

# chkconfig --list|grep crond

crond           0:off 1:off 2:on 3:on 4:on 5:on 6:off


3、使用cron服务制定周期性的计划任务(系统级别和用户级别)


# cat /etc/crontab

SHELL=/bin/bash  指定默认shell

PATH=/sbin:/bin:/usr/sbin:/usr/bin 命令的相关路径

MAILTO=root 默认发送邮件给root MAILTO=""

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

分 时 日 月 周 用户名 命令


周期 用户 命令

,:表示分割 * 10,12 * * *  10点和12点

-:表示一个段 连接  * * 1-5 * *  1号到5号

/n:表示每隔  */5 * * * * 每隔5分钟


* * * * * 每分钟

30 22 * * * 每天晚上10:30

00 05 1,5 * * 每月的1号和5号的凌晨5点整

*/2 * * * 1-5 每周一到周五每隔2分钟

02 8-20/3 * * 0   每周日的8:02 11:02 14:02 17:02 20:02


15 22 1 1 *

00 8-12/2 * * 1,3,5


01 * * * * root run-parts /etc/cron.hourly/

02 04 * * * root run-parts /etc/cron.daily/

22 04 * * 7 root run-parts /etc/cron.weekly/

42 04 1 * * root run-parts /etc/cron.monthly/


run-parts:cron服务使用该工具来执行后面所根的目录里的所有的可执行的脚本文件


demo1:让系统每隔1分钟执行wall命令“hello world”

方法一:

# vim /etc/cron.d/test

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root

HOME=/

*/1 * * * * root wall "hello world"


方法二:

vim /etc/crontab

...

*/1 * * * * stu1 id stu2 >>/tmp/test.log


demo2:让系统每小时去执行某个任务

方法一:

vim userdel.sh

#!/bin/bash

for i in {1..3}

do

  userdel -r stu$i

done

echo userdel ok >>/tmp/test.log


chmod +x userdel.sh


cp userdel.sh /etc/cron.hourly/


方法二:

vim /etc/crontab

...

*/1 * * * * root run-parts /root


cp test.sh useradd.sh /root


测试验证


问题:

当系统以外宕机,错过了任务执行的时间,怎么办?

anacrontab :是cron服务的一个扩展服务。

cat /etc/anacrontab

..

#period in days   delay in minutes   job-identifier   command

1 5 cron.daily  nice run-parts /etc/cron.daily

7 25 cron.weekly  nice run-parts /etc/cron.weekly

@monthly 45 cron.monthly  nice run-parts /etc/cron.monthly


用户级别的计划任务:

crontab命令:

root用户:

crontab -e ——>vi 编辑器

crontab -eu user01 给user01用户制定计划任务

crontab -l 列出root用户的计划任务

crontab -lu user01

crontab -r 删除root用户的计划任务

crontab -ru user01


普通用户:

crontab -e

crontab -l

crontab -r


# export EDITOR=vim 定义调用编辑器

demo1:root

*/1 * * * * echo 88888 >/tmp/test.log


说明:

不需要在计划任务里写用户名,如果写也不会报错,但是不能保证计划任务正常执行


crontab -l

cd /var/spool/cron

ls


demo2:

vim /root/time.sh

#!/bin/bash

ntpdate 192.168.1.2

echo "system date is ok" >>/tmp/test.log


chmod +x time.sh

*/1 * * * * /root/time.sh >/dev/null 2>&1


说明:

周期后面直接跟文件的绝对路径,文件要有可执行权限。


demo3:每隔1分钟stu2给stu1用户发送一封邮件

$ crontab -l

*/1 * * * * mail -s "test" stu1 </etc/hosts


mail -s "test" stu1 </etc/hosts

echo hahahah |mail stu1


cron服务的用户的访问控制:

/etc/cron.deny

/etc/cron.allow


练习:

1、创建2个本地用户test1和test2

useradd test1

useradd test2

2、压缩备份/var/www目录下的所有内容到/www_bak下,叫“当前的系统日期”,即/www_bak/20160715.tar.gz,该工作需要由test1用户完成,并且在工作日(周1-5||单数月||每天||凌晨5点10分)去执行。同时将标准输出和标准错误重定向到/tmp/log中

vim bak.sh

#!/bin/bash

tar -cvzf /www_bak/$(date +%Y%m%d).tar.gz /var/www/*

crontab -eu test1

10 05 * 1,3,5,7,9,11 1-5 /bin/bash /tmp/bak.sh >/tmp/log 2>&1


3、系统只允许test1用户使用cron服务,不允许test2用户使用

echo test1 >/etc/cron.allow

su - test1

crontab -e


30 01 * * 1 bak1.sh

30 01 * * 2 bak1.sh

30 01 * * 3 bak0.sh

30 01 * * 4 bak1.sh

30 01 * * 5 bak1.sh

30 01 * * 6 bak1.sh

30 01 * * 7 bak0.sh



系统日志:

rhel5 syslog

rhel6 rsyslog 支持日志写入到数据库、支持队列、模块化

1、确认软件是否安装

# rpm -q rsyslog

rsyslog-5.8.10-8.el6.x86_64

# rpm -ql rsyslog|grep etc

/etc/logrotate.d/syslog 日志轮巡文件

/etc/pki/rsyslog

/etc/rc.d/init.d/rsyslog  启动脚本

/etc/rsyslog.conf  主配置文件

/etc/rsyslog.d 相关主目录

/etc/sysconfig/rsyslog 额外配置文件

/sbin/rsyslogd 二进制命令


2、确认服务是否启动

# chkconfig --list|grep rsyslog

rsyslog         0:off 1:off 2:on 3:on 4:on 5:on 6:off

# service rsyslog status

rsyslogd (pid  1594) is running...


3、通过修改配置文件来完成服务日志配置

配置文件里相关符号:

. 用来分割服务和级别

* 任何服务或任何级别

= 有=代表等于某一个日志级别;没有=代表大于等于某个日志级别

! 排除操作,只有前面两个相同服务时才有意义

; 用于分割"服务.日志级别"

, 用来分割不同的服务


日志级别:

      #define KERN_EMERG    "<0>"  /* system is unusable               */

      #define KERN_ALERT    "<1>"  /* action must be taken immediately */

      #define KERN_CRIT     "<2>"  /* critical conditions              */

      #define KERN_ERR      "<3>"  /* error conditions                 */

      #define KERN_WARNING  "<4>"  /* warning conditions               */

      #define KERN_NOTICE   "<5>"  /* normal but significant condition */

      #define KERN_INFO     "<6>"  /* informational                    */

      #define KERN_DEBUG    "<7>"  /* debug-level messages             */


none:不是一个日志级别,代表不记录日志

0:系统不可用

1:特别需要留意的非常严重的信息

2:相对较严重的信息

3:错误信息

4:警告信息

5:正常的需要留意的信息

6:正常的输出信息 info

7:调试信息


cron.info cron服务的大于等于info级别的日志

mail.=err mail服务的等于err级别的日志

*.warring 任何服务的大于等于warring级别的日志

cron.info;mail.err

cron,mail.=err

cron.info;cron.!=err

0123456  0124567 012456

cron.info;cron.!err

0123456 4567 456


# cat /etc/rsyslog.conf |grep -v ^#|grep -v ^$


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

authpriv.*                                              /var/log/secure

mail.*                                                  -/var/log/maillog

cron.*                                                  /var/log/cron

*.emerg                                                 *

uucp,news.crit                                          /var/log/spooler

local7.*                                                /var/log/boot.log


本地日志管理:

demo1:记录所有服务的大于等于debug信息日志

1、修改配置文件

vim /etc/rsyslog.conf

#all servicexxxx

*.debug                                                 /var/log/debug


2、重启服务

service rsyslog restart

3、测试验证

cat /var/log/debug

Oct 10 01:41:52 vm01 kernel: imklog 5.8.10, log source = /proc/kmsg started.

Oct 10 01:41:52 vm01 rsyslogd: [origin software="rsyslogd" swVersion="5.8.10" x-pid="13819" x-info="http://www.rsyslog.com"] start

Oct 10 01:42:01 vm01 CROND[13829]: (root) CMD (/root/time.sh >/dev/null 2>&1)


demo2:指定mail服务的日志到某个文件

vim /etc/rsyslog.conf

mail.info                                               /var/log/testmaillog

service rsyslog restart

测试:

# echo 8888 |mail -s test stu1

# logger -t "test log" -p mail.info test mail log


# tail -f testmaillog

Oct 10 01:44:58 vm01 postfix/pickup[13077]: AA17F44BFB: uid=0 from=<root>

Oct 10 01:44:58 vm01 postfix/cleanup[13886]: AA17F44BFB: message-id=<20201009174458.AA17F44BFB@vm01.uplooking.com>

Oct 10 01:44:58 vm01 postfix/qmgr[2117]: AA17F44BFB: from=<root@vm01.uplooking.com>, size=442, nrcpt=1 (queue active)

Oct 10 01:44:58 vm01 postfix/local[13888]: AA17F44BFB: to=<stu1@vm01.uplooking.com>, orig_to=<stu1>, relay=local, delay=0.04, delays=0.03/0.01/0/0, dsn=2.0.0, status=sent (delivered to mailbox)

Oct 10 01:44:58 vm01 postfix/qmgr[2117]: AA17F44BFB: removed


Oct 10 01:46:17 vm01 test log: test mail log


demo3:自定义管理ssh服务的日志

1、修改ssh服务的主配置文件

# vim /etc/ssh/sshd_config

SyslogFacility local1

# service sshd restart

2、修改rsyslog服务的主配置文件

vim /etc/rsyslog.conf

local1.info                                             /var/log/ssh

# service rsyslog restart

3、测试验证

client:192.168.1.3

#ssh 192.168.1.102

# tail -f ssh

Oct 10 01:53:39 vm01 sshd[14036]: Accepted password for root from 192.168.1.3 port 35744 ssh2

Oct 10 01:54:07 vm01 sshd[14059]: Accepted password for root from 192.168.1.140 port 55648 ssh2

Oct 10 01:54:11 vm01 sshd[14059]: Received disconnect from 192.168.1.140: 11: disconnected by user


远程日志管理:

client:192.168.1.3

server:192.168.1.102

思路:

server:rsyslog软件已安装、服务起来、打开监听(514)

client:rsyslog软件、服务起来、配置日志传送的远程服务器


server:192.168.1.102

1、修改配置文件

vim /etc/rsyslog.conf

# Provides UDP syslog reception

$ModLoad imudp

$UDPServerRun 514

2、重启服务

service rsyslog restart

3、查看514端口是否处于监听状态

# netstat -nlup|grep :514

udp        0      0 0.0.0.0:514                 0.0.0.0:*                               14343/rsyslogd      

udp        0      0 :::514                      :::*                                    14343/rsyslogd      



client:192.168.1.3

1、修改配置文件

vim /etc/rsyslog.conf


*.* @192.168.1.102:514


2、重启服务

3、测试验证

# logger -it test "test test test log"


默认情况下,会放到192.168.1.102server端的/var/log/messages


demo2:将client上的ssh服务的日志远程传送到server端/var/log/ssh1文件里

思路:

1、server端开启514端口并且指定该日志文件存放在哪里

2、client指定将ssh服务的日志传送给server端,同时需要指定ssh服务的日志设备


server:192.168.1.102(日志集中管理服务器)

1、修改配置文件

vim /etc/rsyslog.conf

# Provides TCP syslog reception

$ModLoad imtcp

$InputTCPServerRun 514

local2.*                                    /var/log/ssh1


2、重启服务

# service rsyslog restart


client:192.168.1.3

1、修改ssh服务的主配置文件

vim /etc/ssh/sshd_config

...

SyslogFacility local2


重启ssh服务

service sshd restart


2、修改rsyslog.conf配置文件

vim /etc/rsyslog.conf

local2.* @@192.168.1.102:514 @代表UDP协议 @@代表TCP协议


重启rsyslog服务

service rsyslog restart



测试验证:

验证机器:192.168.1.2

ssh 192.168.1.3


server:192.168.1.102(日志管理服务器)

# tail -f /var/log/ssh1


Jul 25 17:13:41 node1 sshd[6827]: Accepted password for root from 192.168.1.2 port 50004 ssh2


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  7BPBXg9HtzBk   2023年11月19日   23   0   0 yum源vimcentos
  vxoexqgjyiCS   2023年11月19日   23   0   0 linuxvim数据
  YKMEHzdP8aoh   2023年11月30日   32   0   0 vimUDP
  xIUntf9oR6GI   2023年11月28日   27   0   0 sedvim基础命令
  L83A5jZvvg3Q   2023年11月19日   46   0   0 vim
  vxoexqgjyiCS   2023年11月19日   24   0   0 服务器vim字符串
  vxoexqgjyiCS   2023年11月22日   23   0   0 linuxvimbash
  L83A5jZvvg3Q   2023年11月19日   26   0   0 vimpython