什么是计划任务,计划任务类似于我们平时生活中的闹钟。
在Linux系统的计划任务服务crond可以满足周期性执行任务的需求。
crond进程每分钟会处理一次计划任务, 计划任务主要是做一些周期性的任务目前最主要的用途是定时备份数据
Schedule one-time tasks with at. 一次性调度执行 at
Schedule recurring jobs with cron. 循环调度执行 cron
Schedule recurring system jobs. 所有计划任务执行中的输出都会以邮件的方式发送给指定用户, 除非重定向
// 循环调度执行cron 进程每分钟会处理一次计划任务
[root@wangqing ~] # systemctl status crond
[root@wangqing ~] # ps aux |grep crond
root 1201 0.0 0.0 126264 1640 ? Ss 11 : 15 0 : 00 /usr/sbin/crond -n
计划任务分为以下两种情况:
系统级别的定时任务:
清理系统缓存
临时文件清理
系统信息采集
日志文件切割
用户级别的定时任务:
定时同步互联网时间
定时备份系统配置文件
定时备份数据库文件
文件 说明 /etc/crontab / /crontab配置文件 /etc/cron.deny / /该文件中所列用户不允许使用crontab命令 /var/spool/cron/ * // 所有用户定时文件都存放此目录,文件以用户名命名 /var/log/cron / /定时任务执行后的日志文件,可用来回溯
crond任务管理
参数 含义 指定示例
[root@wangqing ~] # crontab --help -e 编辑crontab文件内容 crontab -e-l 查看crontab文件内容 crontab -l
-r 删除crontab文件内容 crontab -r
-u 管理其他用户的计划任务 crontab -u wangqing -l
注意: crontab {-l -e}实际上就是在 *** 作/var/spool/cron/username
//如何进行计划任务的备份?
crond时间含义
# 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 //星期 # | | | | |# * * * * * command to be executed
// * 表示任意的(分、时、日、月、周)时间都执行// - 表示一个时间范围段, 如5-7点// , 表示分隔时段, 如6,0,4表示周六、日、四// */n 表示每隔n单位时间, 如*/10 每10分钟
crond编写示例
00 02 * * * command
00 02 1 * * command
00 02 14 2 * command
00 02 * * 7 command
00 02 * 6 5 command
00 02 14 * 7 command
00 02 14 2 7 command
00 02 * * * command* 02 * * * command* * * * * command* * 14 2 * command*/5 * * * * command
00 02 * 1,5,8 * command
00 02 1-8 * * command
crond书写规范
//1.为计划任务增加必要的注释
[root@wangqing ~]# crontab -l
##time sync
* /5 * * * * /u sr/sbin/ntpdate time1.aliyun.com &> /dev/ null
//2.规范计划任务执行脚本存放的路径/scripts/
[root@wangqing ~]# crontab -l
##backup www to /backup 30 01 * * * /bin/ sh /scripts/www_backup.sh &> /dev/ null
//3.执行shell脚本任务前加/bin/sh, 脚本结尾加&>/dev/null//调试好后应屏蔽debug输出信息,避免产生系统垃圾占用过多inode, 如需输出日志, 可重定向至日志文件
[root@wangqing ~]# crontab -l
####backup www to /backup 30 01 * * * /bin/ sh /scripts/www_backup.sh &> /tmp/ www_backup.log
[root@wangqing ~] # crontab -e
#每天凌晨切割nginx日志 05 00 * * * /bin/bash -x /scripts/cut_nginx.sh &>/scripts/ log /nginx. log
#每天5点备份数据库 00 05 * * * /bin/bash -x /scripts/dump_sql.sh &>/scripts/ log /mysql. log
//注意: 1. 我们所有的crond服务是运行的程序。而crontab命令用户用来设置定时规则的命令。 2. crond服务是企业生产工作中常用的重要服务,at很少使用,可以忽略。 3. 几乎每个服务器都会用到crond服务。
建议: 将需要定期执行的任务写入脚本中, 建立/scripts目录统一存放脚本, 脚本中命令必须使用绝对路径,手动执行脚本检测输出是否正常, 然后将脚本加入计划任务测试, 测试后无问题将脚本输出写入对应的日志文件中即可。
计划任务添加步骤:
作业:
a. 00 13,20 * 1-5 * backup.sh
b. 0 13,20 1,5 * * backup.sh
c. * 13,20 * * 1-5 backup.sh
d. 00 13,20 * * 1-5 backup.sh
说明以上答案每一行是什么含义
2.新建/scripts/httpd.sh文件,并让/scripts/httpd.sh脚本在每天的00:10分执行
3.新建/backup目录,每周一下午5:50将/backup目录下的所有文件打包成 backup.tar.gz
4.写一个定时任务,每天0点5分把/var/log/nginx下7天前的文件转移到/backup/2018_xx_xx的目录中
5.系统脚本/scripts/which.sh,如何定时每隔7分钟执行一次?
6.如何不小心删除了/var/spool/cron/root文件,该如何恢复。
/p3.toutiaoimg.com/origin/tos-cn-i-qvj2lq49k0/49da2da0342544a6a4c02f2aa442d537","uri":"","width":323,"height":27,"darkImgUrl":"https://p3.toutiaoimg.com/origin/tos-cn-i-qvj2lq49k0/d8ccdb213b9b46a183e7cda418c5360b","darkImgUri":"","formulaImgStatus":"succeed"}" class="syl-plugin-formula">
日志:系统、软件 和 用户 *** 作交互信息的记录文件。用于系统审核,日常故障快速定位和排错。
日志文件保存在 /var/log 和 /var/run 目录下。在 RedHat 7 中,系统日志消息由两个服务负责处理,它们是 systemd-journald 和 rsyslogd。
日志的保存时间系统默认是4周,可以通过 cat /etc/logrotate.conf 里面的一项参数查到。rotate 可以修改。
主要日志文件介绍:
/var/log/messages:系统日志,主要记录内核和公共消息。
/var/log/cron:计划执行任务日志。
/var/log/dmesg:系统引导日志。
/var/log/maillog:邮件日志。
/var/log/lastlog:用户登录日志。(用 lastlog 命令)
/var/log/boot.log:系统启动日志。
/var/log/secure:安全和身份验证日志 。
/var/log/wtmp:记录所有用户登录的详细信息。(用 last 命令)
/var/log/btmp:记录失败的登录记录(用 lastb 命令)
/var/run/utmp:用户登录、注销及系统开、关等事件。(用 w / who 命令)
(wtmp、btmp 和 utmp 是二进制文件,不能用cat、vi、tail、more这些命令打开查看)
1、/var/log/messages:系统日志,主要记录内核和公共消息。
1)、messages 信息项包括:事件发生的日期和时间、主机,终端名、进程 和 事件日志。
2)、红色下划线:systemctl restart sshd 重启 sshd 服务。
黄色下划线:tail /var/log/messages 查看 messages 日志。
蓝色方框:messages 日志已经可以查到重启 sshd 服务的记录。
绿色下划线:每个动作都记录得很清楚。暂停中(Stopping)、已暂停(Stopped)、启动中(Starting) 和 已启动(Started)
2、/var/log/cron:计划执行任务日志。
1)、cron 信息项包括:事件发生的日期和时间、主机,终端名、进程 和 事件日志。
2)、cron 保存的是计划任务的日志,我们也可以通过特定输出查看计划进程的一些规律。从中也可以梳理一下计划任务的概念。好像 run-parts(/etc/cron.hourly) 进程,基本都是从开机开始,整点 1 个小时就执行一次。一次由两个事件为一组,一条 starting 0anacron ,另一条 finished 0anacron。
输入 grep run-parts'('/etc/cron.hourly')' 的时候,()括号需要用单引号引起来。
CROND进程,基本上也是从开机开始,整点 1 个小时就执行一次。
run-parts(/etc/cron.daily) 进程每天开机执行一次。一次由四个事件为一组,四个事件里面有两个事件是对应关系。starting man-db.cron 对应 finished man-db.cron,starting logrotate 对应 finished logrotate。
从 cron 日志知道系统的计划任务什么时候触发,执行了什么事件,产生了什么信息。
3、/var/log/dmesg:系统引导日志,显示硬件相关的信息。
head -20 dmesg | nl 列出开头 20 行信息。
4、/var/log/maillog:邮件日志。
红色下划线:tail maillog 查看 maillog 后 10 行信息。
黄色下划线:starting the Postfix mail system 启动 Postfix 邮件系统。daemon started 守护进程启动完成。
maillog 记录的信息都是和邮件有关。
5、/var/log/lastlog:记录所有用户登录最后一次登录本系统的时间信息。用 lastlog 读取信息。lastlog 的几列内容:Username(用户名)、Port(端口)、From(登录IP)、Latest(最后登录时间)。
系统用户是调用系统当中一些特殊服务的用户,不能登录系统(所以它们的登录状态都是显示“**Never logged in**”从来没有登录)。能够登录系统的只有 root 和 新建的普通用户。
6、/var/log/boot.log:系统启动日志。
head /var/log/boot.log 列出头 10 条系统启动的信息(内容较长,里面记录了多次启动的信息)。
通过 3 次的重启,查看 boot.log 大小。每重启一次文件的容量就会增大。也证明了每次启动都会往 boot.log 这个文件写信息。
7、/var/log/secure:安全和身份验证日志 。
tail secure 列出 secure 文件最后 10 行信息。通过 secure 的信息可以发现记录的是安全相关的信息,记录最多的是哪些用户登录服务器的相关日志。
黄色下划线:Failed password for root —— root 的密码错误。
红色下划线:Accepted password for root —— 密码正确,root 用户接受的密码。
绿色下划线:pam_unix(sshd:session): session opened for user root —— 为 root 用户建立会话。
8、/var/log/wtmp:记录所有用户登录的详细信息。一个二进制文件,不能用cat、vi、tail、more这些命令打开查看。用 last 命令查看。last 作用是显示近期用户或终端登录的情况(包括:登录、注销及系统的启动、停机的事件。因此随着系统正常运行时间的增加,该文件的大小也会越来越大,)
last -n 10 —— -n 跟一个数字,指定显示最近登录的数据。(或者 last -10 一样效果)
显示的内容有六列:
第一列:用户名。
第二列:终端位置。(pts/0 伪终端,SSH 或 telnet 等工具远程连接的用户,tty0 直接连接到计算机或本地连接的用户,后面的数字代表连接编号)。
第三列:登录 IP 或 内核。(如果是 0.0 或者 什么都没有,意味着用户通过本地终端连接,除了启动活动,内核版本会显示在状态中)。
第四列:开始时间。
第五列:结束时间。(still、login in 尚未推出,down 直到正常关机,crash 直到强制关机)。
第六列:持续时间。
9、/var/log/btmp:记录失败的登录记录,主要查看错误的登录信息。一个二进制文件,不能用cat、vi、tail、more这些命令打开查看。用 lastb 命令查看。
lastb -n 10 —— -n 跟一个数字,指定显示最近登录的数据。(或者 lastb -10 一样效果)
显示的内容有六列:
第一列:用户名。
第二列:终端位置。(连接失败:notty)。
第三列:登录 IP。
第四列:开始时间。
第五列:结束时间。
第六列:持续时间。
10、/var/run/utmp:用户登录、注销及系统开、关等事件。一个二进制文件,不能用cat、vi、tail、more这些命令打开查看。用 w / who 命令查看。
w 命令:查看登录者的信息及行为。
第一行:系统当前时间、系统没有中断持续性的运行时间、当前登录用户数、CPU在之前 1 分钟、5分钟、15分钟的平均负载。
USER: 登录用户名。
TTY:登录后系统分配的终端号。(tty:物理机本机终端、pts:远程终端)
FROM:远程主机名 IP。(tty 物理机本机不显示、pts 远程终端会显示 IP)
LOGIN@ :登录时间。
IDLE:用户闲置时间 。这是个计时器,用户执行任何 *** 作,计时器就会被重置。(这里显示的时间是距离上次命令 *** 作后多久没有进行 *** 作的闲置时间)
JCPU:执行命令进程所消耗的总时间。 终端连接的所有进程占用时间,包括当前正在运行作业占用的时间。
PCPU:当前进程所消耗 CPU 的时间。
WHAT:用户正在运行的进程 或 命令。(-bash 进程是终端进程)
who 命令:显示关于当前在本地系统上的所有用户信息。who 和 w 差不多,who 显示的内容更为简洁。who 命令显示以下内容:登录名、tty、登录日期 和 时间。如果用户是从远程终端登录的,那么该终端的 IP 也会显示出来。
11、whoami:显示自己的登录用户。
sh文件内容:
#/bin/shDATE=`date +%Y%m%d`
cd /your/log/path/
for f in * do
cp $f /path/to/save/$DATE_$f
done
记得要给这个文件加可执行权限: chmod a+x xxx.sh
加入到计划任务是crontab -e
然后就像使用vi一样加入一行 (每天的2点01分执行)
01 02 * * * /path/to/your/xxx.sh保存退出。然后如果是RH系统最好重启一下crond 服务,就OK了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)