crontab定时任务

本文介绍了程序与进程的概念区别,探讨了前台与后台进程的运行方式,并深入解析了守护进程的作用及控制方法。同时,文章详细讲解了使用crond进行定时任务设定的方法,包括其格式与常见应用场景。

概念扫盲

程序与进程
程序:未运行
进程:运行中,由cpu分配一个标识符pid(program id)

=========================================================================================================
前台运行 || 后台运行
不需要交互的一般都会丢到后台去.
如果程序不是默认后台执行,我们可以手动在后面加"&",吧进程丢到后台.

举个栗子:
查看运行在后台的ssh程序.
sudo netstat -lntup|grep ssh
[2017/8/15 20:40:14] tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1013/sshd           
[2017/8/15 20:40:14] tcp6       0      0 :::22                   :::*                    LISTEN      1013/sshd
如上所示,pid为1013

像ssh这种一直生存着,基本上与系统共存亡的,我们一般称之为守护进程(服务)
=========================================================================================================
如何控制守护进程?
crond(crontab)
与之类似的功能还有atd(当然这里他不是主角).

crond每分钟会去检查系统是否存在需要执行的任务,如果存在,那么就执行那些任务.
没错,这货就是个定时器.
想想看js中的internal,TMD的道理还是相同的.

crond对于秒无能为力
真想用,那就自己写个shell,
或者使用quartz(这是什么鬼东西啊,不认识)

========================================================================================================
定时任务的应用
1. 举个栗子,备份
2. 发邮件
...
=========================================================================================================
定时任务分
系统自带的定时任务
自定义的定时任务

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

cron的格式

at

绿叶1号
适用于只执行一次的任务
这货用的很少,基本没人用,了解即可
我们写入的配置会被atd服务读取执行.


anacron

绿叶2号
适应于非24小时开机的服务器执行的定时任务
基本也是没人用


cron

红花
crond是一个服务
crontab是用户用来设置规则的
常见的参数是
-l  --list 
-e  --edit
corntab操作的文件是/var/spool/cron/${user}
推荐使用crontab -e,因为有语法检查,当然了你有信心,直接该文件我也没意见

用户的定时任务格式是7列
系统的定时任务格式是8列,
其实列数不重要,不同版本可能有差异,
自己看着说明书搞就行了

crontab的格式如下(文件来自/etc/crontab)
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# 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

对应的是" 分时日月周"
*   任意值
-   一段时间范围,栗子:5-10
,   多个值之间的分割符,比如说:5,8,9,10
/n  表示每隔n单位时间执行一次

实战

小任务:
每分钟打印一次自己的名字到指定文件中.

解:
添加文件
touch /home/guang/notes/test_crontab_result.log
然后直接跑到/etc/crontab中添加一行数据
*/1  *  *  *  * guang  echo "huang guang da" >> /home/guang/notes/test_crontab_result.log

结果如下:
➜  notes cat test_crontab_result.log
huang guang da
huang guang da

nice
但是有问题,/1是多余的,本来就是每分钟,画蛇添足了,大兄弟


=========================================================================================================
小任务:
每天凌晨3点执行一个脚本(内容随意,本意是备份,现在改为输出名字吧)

解:
首先,添加touch /home/guang/notes/backup_result.log
然后添加脚本/home/gaung/bin/backup.sh
vi /home/gaung/bin/backup.sh
# here is the shell use to finish back up task in 3:00 everyday 
# @author guang
# @date 2017-08-15
echo "huang guang da" >> /home/guang/notes/backup_result.log

最后,跑到/etc/crontab中添加一行数据
*  3  *  *  * guang  /bin/sh /home/gaung/bin/backup.sh
# 这里有两个要注意的点:1 使用sh来执行脚本;2 sh 和 脚本都要写全路径

补充

上面/etc/crontab是属于系统级的任务排程
除此以外还有用户级的任务排程
用户的定时任务文件在/etc/spool/cron/{user};文件默认是不存在的,当使用crontab -e 进行任务编写时才会添加该文件
查看任务的执行情况可以去看日志/etc/log/cron
1. centos7默认每周日志轮替;
2. 分析日志可以帮助查看系统是否运行了不正常的任务,如被植入木马等
关于用户写任务排程的权限可以查看修改/etc/cron.deny和/etc/cron.allow

编写任务
[root@com]/var/spool/cron# crontab -e 
no crontab for root - using an empty one
crontab: installing new crontab
[root@com]/var/spool/cron# ls
root
[root@com]/var/spool/cron# crontab -u guang -e 
no crontab for guang - using an empty one
crontab: installing new crontab
[root@com]/var/spool/cron# ls
guang  root
[root@com]/var/spool/cron# 


查看日志:
Oct 14 22:34:02 com CROND[4214]: (root) CMD (echo "root to huang guang da" >> /home/guang/notes/backup_result.log)
Oct 14 22:34:02 com CROND[4215]: (guang) CMD (echo "huang guang da to huang guang da " >> /home/guang/notes/backup_result.log)
Oct 14 22:34:02 com CROND[4216]: (guang) CMD ( echo "huang guang da" >> /home/guang/notes/test_crontab_result.log)
Oct 14 22:34:02 com CROND[4217]: (guang) CMD ( /bin/sh /home/guang/bin/backup.sh)
Oct 14 22:35:01 com CROND[4235]: (guang) CMD (echo "huang guang da to huang guang da " >> /home/guang/notes/backup_result.log)
Oct 14 22:35:01 com CROND[4236]: (guang) CMD ( /bin/sh /home/guang/bin/backup.sh)
Oct 14 22:35:01 com CROND[4237]: (root) CMD (echo "root to huang guang da" >> /home/guang/notes/backup_result.log)
Oct 14 22:35:01 com CROND[4238]: (guang) CMD ( echo "huang guang da" >> /home/guang/notes/test_crontab_result.log)


查看权限
[root@com]/etc# ls -l cron.deny cron.allow
ls: cannot access cron.allow: No such file or directory
-rw-------. 1 root root 0 Mar 31  2016 cron.deny
[root@com]/etc# cat cron.deny 
[root@com]/etc# 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值