Linux基础 crontab定时任务

时间:2021-07-18 22:12:02
linux定时任务:


程序、进程、守护进程
程序:软件,可执行的代码
进程:正在执行的命令、服务,执行完成,就会退出
守护进程(服务):在后台一直运行的进程
sshd:
守护进程:daemon


1)检查crond服务是否允许
/etc/init.d/crond status
/etc/init.d/crond start
chkconfig crond on


2)定时任务的写法
*   *   *    *   *  cmd
分   时   日   月   周  执行的命令


3)举例
编辑定时任务crontab -e
* * * * * echo 1234567 >>/tmp/oldboy.txt
查看定时任务crontab -l


练习:
每隔两个小时,重启一下sshd服务


4)定时任务
一定要,命令行,先测试!!!
10 */2 * * *   每隔2小时的每分钟,都执行


5)定时任务的取值范围
*       *       *        *      *  cmd
分       时       日       月       周  执行的命令
0-59    0-23    1-31    1-12    0-6


练习:
每周3,下午6点整,echo jiaozuoye
00 18 * * 3


6)注意
*/3  每隔多久执行一次


7)例子:
每天下午的2点整和4点整,京东秒杀 echo jingdongmiaosha
00 14,16 * * *  echo jingdongmiaosha


练习:
每年的3、6、11月份,1-7号,早上8点整到晚上8点整 echo 进行大酬宾
00 8-20 1-7 3,6,11 * echo  dachoubin




8:注意事项
a.定时任务执行命令的时候,最好使用命令的决对路径。
b.定时任务一定要加注释!(君子协议)
c.特殊符号需要转义;例子:* * * * * echo "`date +\%F\ \%T`" >>/tmp/time.txt
d.最好不要让直行的命令,有输出,如果避免不了有输出,就把它定向到空(黑洞)
e.定时任务中,严禁使用相对路径
f.尽量使用crontab -e命令来添加定时任务!因为crontab带有语法检查。


不加引号:只能输出单行文本;能解析变量
单引号: 可以输出多行文本; 不能解析变量,适合输出带有特殊符号的内容
双引号: 可以输出多行文本;能解析变量


标准输出:1>(默认就是标准输出)
错误输出:2>


黑洞:/dev/null


9:批量添加定时任务
crontab -e编辑定时任务,实际上就是编辑文件/var/spool/cron/root
#上课
30 9 * * 0 /oldboy.sh &>/dev/null


echo -e '#上课\n30 9 * * 6 /oldboy.sh &>/dev/null' >>/var/spool/cron/root




建个回收站recovery
alias rm = "mv -f -t /recovery"
直接删除\rm     \取消别名作用


crontab -e
* */2 * * * \rm -rf /recovery/* 
#每两小时清空一次recovery




minute hour day month dayofweek command
minute是分钟,取值范围:0-59
hour段是小时。取值范围:0-23
day段是一个月中的第几天,取值范围:1-31
month是一年中的第几个月,取值范围:1-12
dayofweek是一个星期中的第几天,以星期天开始依次的取值为0~7,0、7都表示星期天。
command是定时运行的命令。




root表示以root用户身份来运行
run-parts表示后面跟着的是一个文件夹,要执行的是该文件夹下的所有脚本
    所有可用值用 * 表示
    整数间的连字号(-)表示整数列,例如1-4意思是整数1,2,3,4
    指定数值由逗号分开。如:3,4,6,8表示这四个指定整数。
    符号“/”指定步进设置。“/<interger>”表示步进值。如0-59/2定义每两分钟执行一次。步进值也可用星号表示。如*/3用来运行每三个月份运行指定任务。
 
    以“#”开头的为注释行,不会被执行。
 
    如果一个cron任务需要定期而不是按小时,天,周,月来执行,则需要添加/etc/cron.d目录。这个目录下的所有文件和文件/etc/crontab语法相同,查看样例:
 
# record the memory usage of the system every monday 
# at 3:30AM in the file /tmp/meminfo 
30 3 * * mon cat /proc/meminfo >> /tmp/meminfo 
# run custom scrīpt the first day of every month at 4:10AM 
10 4 1 * * /root/scrīpts/backup.sh


    除了root用户之外的用户可以执行crontab配置计划任务。所有用户定义的crontab存储在目录/var/spool/cron下,任务会以创建者的身份被执行。要以特定用户创建一个crontab,先以该用户登录,执行命令crontab -e,系统会启动在VISUAL或者EDITOR中指定的的编辑软件编辑crontab。文件内容与/etc/crontab格式相同。示例如下:
 
0 3 * * * /home/dbbackup/db1backup.sh backup
0 4 * * * /home/dbbackup/db2backup.sh backup
 
    表示每天3点执行/home/dbbackup/db1backup.sh backup,4点执行/home/dbbackup/db2backup.sh backup,如果是每五分钟执行一次可改为:
 
*/5 * * * * /home/dbbackup/db2backup.sh backup
 
    当更改的crontab需要保存时,文件会保存在成如下文件/var/spool/cron/username。文件名会根据用户名而不同。
 
    cron服务会每分钟检查一次/etc/crontab、/etc/cron.d/、/var/spool/cron文件下的变更。如果发现变化,就会下载到存储器中。因此,即使crontab文件改变了,程序也不需要重新启动。推荐自定义的任务使用crontab -e命令添加,退出后用/etc/init.d/crond restart命令重启crond进程,官方文件说不用重启进程,但我遇到不重启无法运行任务的情况。开始不知道/etc/crontab文件中的run-parts是什么意思,直接把命令按照/etc/crontab的格式加上总是无法运行,后来才知道run-parts是指后面跟着的是文件夹。
 四.crontab服务的启动关闭
sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置