程序文件:程序代码组成,但是没有在计算机内执行,当前没有执行
进程:所谓进程就是计算机中正在执行的程序
守护进程:就是一直运行的程序
1.linux下的定时任务
acrontab(非常重要)|at(适合执行一次就结束的任务)|anacron
*我们所说decrond服务是运行程序,而crontab命令用户用来设置定时规则命令
*用户一般是6段|系统是7段
* * * * * |分钟(0-59)|小时(0-23)|日(1-31)|月(1-12)|周(0-6)
[常见表示方法]
* 任意时间都
- 分隔符:时间范围
, 分隔时段
/n 每隔n单位时间
30 3,12 * * * 每天的3:30和12:00
30 */6 * * * 每隔6小时的半点时刻
30 8-18/2 * * * 8:00-18:00每两个小时的半点时刻
45 4 1,10,22 * * * 每个月的1,10,22的凌晨4:45分
10 1 * * 6,0 每个周6,日的凌晨1:10分执行
00 1 * * * 每隔一小时的整点
* 23-7/1 * * * 23:00-7:00每分钟
00 11 * 4 1-3 每年的4月份的周1-3的上午11:00执行
[root@XMJ ~]# which crontab
/usr/bin/crontab
[root@XMJ ~]# ls -l /usr/bin/crontab
-rwsr-xr-x. 1 root root 47520 Jul 19 2011 /usr/bin/crontab
[root@XMJ ~]#
[root@XMJ ~]# crontab -e #编辑定时任务
[root@XMJ ~]# crontab -l #查看定时任务(任务存放位置/var/spool/cron/$user)
[root@XMJ ~]# /etc/cron.deny #黑名单(不允许使用crontab命令的user)
[root@XMJ ~]# /etc/cron.allow #白名单
[root@XMJ ~]# crontab -u user -e job #-u指定用户
*定时任务存放目录
[root@XMJ ~]# cd /var/spool/cron/
[root@XMJ cron]# ls
root
[root@XMJ cron]# cat root
#secu-tcs-agent monitor, install at Tue May 30 14:12:43 CST 2017
* * * * * /usr/local/sa/agent/secu-tcs-agent-mon-safe.sh /usr/local/sa/agent > /dev/null 2>&1
*/1 * * * * /usr/local/qcloud/stargate/admin/start.sh > /dev/null 2>&1 &
*/20 * * * * /usr/sbin/ntpdate ntpupdate.tencentyun.com >/dev/null &
[root@XMJ cron]#
2.crontab依赖的服务
[root@XMJ ~]# chkconfig --list crond
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[root@XMJ ~]# ps -ef | grep cron
root 1115 1 0 Jun15 ? 00:00:25 crond
root 29104 24603 0 21:37 pts/1 00:00:00 grep cron
[root@XMJ ~]#
3.书写定时任务的要领
(1)添加必要的英文注释
(2)执行shell脚本前,要加/bin/sh(使用绝对路径之后,可以不用添加+x权限给脚本)
(3)在指定任务下执行,注意修改环境变量
(4)多用crontab -e|-l去查看和编辑定时任务(防止出错)
(5)定时任务结尾加(脚本任务)> /dev/null 2>&1 &
(6)生产任务程序,不要随意打印输出(容易产生垃圾,如果需要看结果,可以将其重新定向到文件中)
(7)定时任务最好写脚本里面执行***
(8)命令程序要用绝对路径
4.实践
*每分钟输入自己的名字到指定文件
[root@XMJ ~]# mkdir /server/log/ -p
[root@XMJ ~]# echo "xmj" >> /server/log/xmj #先测试以下
[root@XMJ ~]# cat /server/log/xmj
xmj
[root@XMJ ~]# vim /var/spool/cron/root
[root@XMJ ~]# tail -f /server/log/xmj
xmj
xmj
xmj
^C
[root@XMJ ~]# crontab -l
.....
#print my name
* * * * * echo "xmj" >> /server/log/xmj
.....
*注:在echo中添加命令时,需要用``(反引号)引起来
[root@XMJ ~]# echo " `date +%F` xmj" >> /server/log/date
[root@XMJ ~]# tail /server/log/date
2017-07-17 xmj
[root@XMJ ~]#
*查看错误:查看日志(/var/log/...)
5.重定向
> 把内容清空并且重新添加
1 标准输出,>|>>
2 错误输出,2>|2>>
0 标准输入,<|<<
2>&1把标准错误重定向的标准输出(>&)(>/dev/null 2>&1====1>/dev/null 2>/dev/null)
[root@XMJ ~]# ddddd 2>/server/log/xmj #把错误的输出到指定文件
You have new mail in /var/spool/mail/root
[root@XMJ ~]# cat /server/log/xmj
-bash: ddddd: command not found
[root@XMJ ~]#
6.系统定时任务配置:/etc/crontab
*打包/etc/services(规范到2小时)
[root@XMJ log]# vim tar.sh
cd /etc && tar zcvf /server/backup/services_$(date +%F-%H).tar.gz ./services
*&&表示前面执行成功了,继续执行后面的
[root@XMJ log]# sjkdhu && echo 1
-bash: sjkdhu: command not found
[root@XMJ log]# pwd && echo 1
/server/log
1
[root@XMJ log]# /bin/sh tar.sh
./services
[root@XMJ log]# ll /server/backup/
total 132
-rw-r--r-- 1 root root 127319 Jul 17 10:16 services_2017-07-17-10.tar.gz
[root@XMJ log]# crontab -e
.....
00 */2 * * * /bin/sh /server/log/tar.sh >/dev/null 2>&1
.....
[root@XMJ log]#
*每天晚上12:00: 00 00 * * *
7.date 修改时间
*-s 修改时间 月/日/年
[root@XMJ ~]# date -s "03/23/2014 19:25:00"
Sun Mar 23 19:25:00 CST 2014
[root@XMJ ~]# date
Sun Mar 23 19:25:02 CST 2014
[root@XMJ ~]#
[root@XMJ sbin]# /usr/sbin/ntpdate #和时间同步有关
*企业里面一般是和互联网做同步
^^^面试
*请描述crontab定时任务的作用和基本语法格式及书写要求
crontab就是linux下的一个周期性执行计划任务的服务命令工具
语法:共6段,前五段是时间段,默认时间是*,表示每的意思时间段中用空格分隔(分别是:分钟|小时|日|月|周),第6段表示任务命令段
书写举例
注意事项(见上边)