Skip to content

Instantly share code, notes, and snippets.

@arrayadd
Last active November 1, 2018 05:50
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arrayadd/50c73e9d68f8d6c628f1378158ed090c to your computer and use it in GitHub Desktop.
Save arrayadd/50c73e9d68f8d6c628f1378158ed090c to your computer and use it in GitHub Desktop.
【Linux】cron表达式的小坑

今天遇到个坑,因为凌晨要执行个脚本,把一些数据从一个表清洗到另一个表。结果写好脚本,线下服务器测试crontab定时任务的时候,到时间死活就是不执行。后来找同事看了下,才发现

Linux 下的crond服务,所用的cron表达式,只能精确到分,而通常项目中,例如spring,quartz 是可以精确到秒的。

结果我复制的项目中平时运行好好的的cron表达式,自然无法定时执行。


Linux下cron表达式格式

cron有两个配置文件,一个是全局配置文件(/etc/crontab),是针对系统任务的;一组是crontab命令生成的配置文件(/var/spool/cron/用户名 下的文件),是针对某个用户的. 通常都用/var/spool/cron下的。

上图是查看/etc/crontab文件内容,不难发现,文件中已经注明了,cron表达式的格式,和取值范围。

crontab

系统级别的定时任务,通常编辑/etc/crontab文件就行。但是对于普通用户,没有root权限,根本无法修改系统文件。

所以只能编辑/var/spool/cron/下的跟对用户同名的用户级别的cron文件,但是注意,这个文件是不能直接进入目录编辑的需要通过以下命令:

crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除没个用户的cron服务
crontab -e //编辑某个用户的cron服务

crond服务

crontab 只是个命令,而 cron服务是linux的内置服务,但它不会开机自动启动。可以用以下命令启动和停止服务: /sbin/service crond start /sbin/service crond stop /sbin/service crond restart /sbin/service crond reload

cron服务每分钟不仅要读一次 /var/spool/cron 目录内的所有文件,还需要读一次 /etc/crontab 文件 crond则是cron服务的守护进程,它每分钟都检查 /etc/crontab 文件,以及 /var/spool/cron 目录中的改变。如果发现了改变,它们就会被载入内存。这样,当某个 crontab 文件改变后就不必重新启动守护进程了。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment