Linux定时任务

Linux定时任务

1.定时任务crond介绍

crond - 执行预定命令的守护进程,相当于定时任务的服务,在系统启动时便开启。
crond 只能执行最少分钟级别的定时任务,如果需要执行秒级别的需要自己写脚本,不过大多数情况下crond足够用了


2.定时任务的书写位置

使用man crond来查看crond使用,其中有下面的一段描述:

NAME
       crond - 执行预定命令的守护进程
       crond - daemon to execute scheduled commands  
       
 
DESCRIPTION
   
   ...
  
  // Cron将会检查这些文件和目录
  Cron checks these files and directories:

  /etc/crontab
       // 翻译:系统定时任务。现在文件默认是空。最初,它通常用于运行每日、每周、每月的工作。
       // 默认情况下,这些作业现在已经运行完了读取/etc/anacrontab配置文件。更多信息请参见anacrontab(5)。
	     system crontab.  Nowadays the file is empty by default.  Originally it was usually used to run daily, weekly, monthly jobs.  By default  these  jobs  are  now  run  through
       anacron which reads /etc/anacrontab configuration file.  See anacrontab(5) for more details.

  /etc/cron.d/ 
       // 翻译:包含不同用户存储的系统cronjobs的目录。
       directory that contains system cronjobs stored for different users.

  /var/spool/cron
       // 翻译:包含由crontab命令创建的用户crontables的目录。
       directory that contains user crontables created by the crontab command.

从官方给出的描述可以看出:
crond将会扫描这些文件来执行定时任务:
1./etc/crontab文件
2./etc/cron.d/目录下的文件
3./var/spool/cron/$USER文件

/etc/crontab是系统级别的定时任务存放的文件,虽然也可以将自己的定时任务写在这个文件,但是最好不要那样做。

那/etc/cron.d/目录下的文件里的定时任务与/var/spool/cron/$USER文件里的定时任务有什么区别呢

区别1:
/etc/cron.d/目录下的文件里的定时任务--由三部分组成—cron user-name commond
/var/spool/cron/$USER文件里的定时任务 --由两部分组成—cron commond

区别2:
/etc/cron.d/目录下的文件里的定时任务--由命令区分该定时任务是由哪个用户执行的
/var/spool/cron/$USER文件里的定时任务 --由文件名区分该定时任务是由哪个用户执行的

一般定时任务写在/var/spool/cron/$USER文件里

3.crontab命令使用

假设我是root用户/或者任意一用户
每次查看定时任务都需要cat /var/spool/cron/root吗?
每次书写定时任务都需要vim /var/spool/cron/root吗?

NO,crond开发人员为我们想到了这个问题。因此便有了crontab工具。

man crontab可以看到:
crontab [-u user] [-l | -r | -e] [-i] [-s]


常用参数 -l 和 -e
第一次使用crontab -e命令将会在/var/spool/cron目录下创建一个对应用户名的文件。

crontab -l 命令等价于 cat /var/spool/cron/ U S E R , 查 看 / v a r / s p o o l / c r o n / USER,查看/var/spool/cron/ USER/var/spool/cron/USER文件里的定时任务
crontab -e 命令等价于 vi /var/spool/cron/ U S E R , 编 辑 / v a r / s p o o l / c r o n / USER,编辑/var/spool/cron/ USER/var/spool/cron/USER文件里的定时任务


默认的是查看和编辑当前用户的,查看别的用户加上可选参数[-u user]


4.定时任务的书写格式

说完了定时任务的书写位置后,最后来说一下定时任务的书写格式:

使用cat /etc/crontab 先看一下注释介绍:

[root@VM_45_49_centos cron.d]# cat /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

SHELL 执行shell脚本的程序的路径
PATH 执行命令的PATH变量
MAILTO 邮件接收人

/etc/crontab文件里的定时任务书写格式:
cron user-name commond

/etc/cron.d/目录下的文件里的定时任务书写格式:
cron user-name commond

/var/spool/cron/$USER文件里的定时任务书写格式:
cron commond

书写规范;
1.每一个定时任务上方都应有注释、注明定时任务创建人、执行时间、以及该定时任务作用;
2.用定时任务执行脚本文件时候
应先自己执行一遍脚本,确保脚本能够正确执行;
应明确写出/bin/sh;
应明确指出脚本路径;
输出的信息可以存为文件也可以输出到空设备。

5.定时任务的案例

// 编写好一个脚本
[root@VM_45_49_centos ~]# cat /server/scripts/cron_printf_test.sh
#!bin/bash
datetime=$(date "+%Y-%m-%d %H:%M:%S")
echo $datetime >> /tmp/test.log

//编写定时任务
[root@VM_45_49_centos cron.d]# crontab -e

# edit by fengzi 每分钟执行一次脚本,将当前时间系统日期输出到/tmp/test.log
* * * * * /bin/sh /server/scripts/cron_printf_test.sh
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值