本文使用操作系统环境:
[wuxt@bogon script]$ cat /etc/redhat-release Red Hat Enterprise Linux
Server release 6.5 (Santiago)
文章目录:
Linux crontab 使用粗解
0 查看所有用户下的定时任务
for u in
cat /etc/passwd | cut -d":" -f1
;do crontab -l -u $u;done
需要 root 用户使用,否则会提示
must be privileged to use -u
1 Linux 下定时执行任务
在 Linux 中,周期执行的任务一般由 crond 这个守护进程来处理。crond 读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。
[root@bogon script]# ps -ef | grep crond | grep -v grep
使用 crontabe -e 编辑当前用户的定时执行任务
[wuxt@bogon script]$ crontab -e
如图,每分钟执行一次 /home/wuxt/script/helloWorld.sh 这个脚本。
2 cron 配置文件
1、/var/spool/cron/ 这个目录下存放的是每个用户包括 root 的crontab 任务,每个任务以创建者的名字命名,比如 wuxt 建的crontab 任务对应的文件就是 /var/spool/cron/wuxt。
一般一个用户最多只有一个crontab文件。
因为只有 wuxt 这个用户有 crontab 任务
[root@bogon cron]# more wuxt
查看文件内容
此文件即 crontab -e 编辑的文件
2、/etc/crontab 这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab。
查看 /etc/crontab
3、/etc/cron.d/ 这个目录用来存放任何要执行的 crontab 文件或脚本。
查看 /etc/cron.d/ 目录
3 cron 权限
crontab 权限问题到 /etc (不同版本 Linux 使用不同的目录,此目录为 Redhat 使用)下一看,文件 cron.allow 和 cron.deny 是否存在
用法如下:
1、如果两个文件都不存在,则只有 root 用户才能使用 crontab命令。
2、如果cron.allow 存在但 cron.deny 不存在,则只有列在 cron.allow 文件里的用户才能使用 crontab 命令,如果 root 用户也不在里面,则 root 用户也不能使用 crontab。
3、如果 cron.allow 不存在, cron.deny 存在,则只有列在cron.deny 文件里面的用户不能使用 crontab 命令,其它用户都能使用。
4、如果两个文件都存在,则列在cron.allow 文件中而且没有列在 cron.deny 中的用户可以使用 crontab,如果两个文件中都有同一个用户,以 cron.allow 文件里面是否有该用户为准,如果 cron.allow 中有该用户,则可以使用 crontab 命令。(这不就是 allow 有的都能用,仅在 deny 中有的不能用么 orz)
4 cron 秒级执行
根据 crontab 的使用可知,最小单位时间为 1min,那要做到秒级,如何实现呢?下面以 每十秒执行一次为例
使用 crontab -e 编辑 /var/spool/cron/wuxt 文件
其中 date.sh 的脚本为:
查看 /home/wuxt/script/date.txt
基本实现每 10s 执行一次,不过时间可能有点点小误差 orz
5 gocron 介绍
使用Go语言开发的定时任务集中调度和管理系统, 用于替代Linux-crontab
github 介绍:gocron
知乎介绍:gocron - 定时任务管理系统