在Linux中使用crontab时需要注意哪些问题

  介绍

在Linux中使用crontab时需要注意哪些问题?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

crontab是一个用于设置周期性被执行的指令。其守护进程为crond。crontab分为两种配置模式,一种为用户级的crontab,一种为系统级的crontab,这里我们分开来谈。

<强>用户级crontab

用户使用新建循环型工作调度时,使用的crontab命令,crontab - e所有用户都可以使用,普通用户也只能为自己设置计划任务。然后自动写入/var/spool/cron/usename

<强>用户控制文件

/etc/cron。允许:
将可以使用crontab的用户写入,仅该文件内的用户可以使用crontab,相当于白名单

/etc/cron.deny:
将禁止使用crontab的用户写入,仅该文件内的用户禁止使用crontab,相当于黑名单
其中/etc/cron.allow优先级大于/etc/cron.deny,为避免混淆,建议二者仅使用一个。

<>强命令

crontab  [-u  usename], [- l | - e | - r),   参数:   - u:只根才有能进行这个任务,也即帮其他用户新建/删除crontab工作调度,   e:调用vi编辑crontab的工作内容,   - l:列出crontab的工作内容,   - r:删除所有crontab的工作内容。

语法

#,。- - - - - - - - - - - - - - - - -,分钟,(0,安康;59),   # |,。- - - - - - - - - - - -安康;小时,(0,安康,23)   #,| |,。- - - - - - - - - - -,日期,(1,安康;31)   #,|,|,|,。- - - - - -安康;月份,(1,安康;12),1月,2月,3月,趁机apr …   #,|,|,|,|,。- - - - -,周几,(0,安康;6),(7)周日=0,或是,一、太阳,星期一,星期二,星期三,星期四,星期五,坐   #,|,|,|,| |   #,*,*,*,*,*,命令

语法与系统级crontab很相似,不同点在于此处不需要指定执行用户,而系统级crontab (/etc/crontab)中需要。

举例如下:

*/10, *, *, *, *,/home/test.sh ,, #每隔10分钟就以当前用户执行一次/home/test.sh脚本   0,2,*,*,*,/home/test.sh ,,,, #每天2点,   0,5,17,*,*,*,/home/test.sh ,, #每天5点、17点   0,17日,*,*,sun /home/test.sh ,, #每周日17点   0,4,17,*,*,太阳,mon /home/test.sh #每周一,周日   @reboot /home/test.sh ,,,,, #系统重启时

这里推荐一个在线小工具:在线生成cron表达式

<强>系统级crontab

系统级crontab一般用于系统的例行性任务,这种方法更加方便与直接直接给其他用户设置计划任务,而且还可以指定执行shell等。配置文件为/etc/crontab,该文件仅根用户能够编辑。

<强>编辑/etc/crontab

默认内容如下:

壳=/bin/bash ,这里是指定使用哪种外壳接口,   路径=/sbin/bin:/usr/sbin:/usr/bin 这里指定文件查找路径,   MAILTO=root ,,,,,,,,,,,,如果有额外的标准输出,以电子邮件将数据送给谁,可以指定系统用户,也可以指定邮件地址,如alliot@iots.vip   #,For  details 阅读man  4, crontab中   #,Example  of  job 定义:   #,。- - - - - - - - - - - - - - - - -,分钟,(0,安康;59),   # |,。- - - - - - - - - - - -安康;小时,(0,安康,23)   #,| |,。- - - - - - - - - - -,日期,(1,安康;31)   #,|,|,|,。- - - - - -安康;月份,(1,安康;12),1月,2月,3月,趁机apr …   #,|,|,|,|,。- - - - -,周几,(0,安康;6),(7)周日=0,或是,一、太阳,星期一,星期二,星期三,星期四,星期五,坐   #,|,|,|,| |   #,*,*,*,*,*,用户名,命令

即:

分时日月周执行用户任务命令

比如我要添加一个计划任务,每隔10分钟就以根身份执行一次/home/测试。sh脚本,则在后面添加:

*/10, *, *, *, *, root /home/test.sh

这里注意,不要漏掉执行者根(用户级的crontab中不需要指定执行者),否则会在/var/log/cron日志中出现”的错误(getpwnam()失败)“错误,计划任务无法正常运行。

<强>重启服务

一般来说Linux下的crontab会自动帮我们每分钟重新读取一次/etc/crontab的例行工作事项,但是出于某些原因或者是其他的Unix系统中,由于crontab是读到内存当中的,所以栽修改完/etc/crontab之后,可能并不会马上执行,这时候需要重启crontab服务。

这里以CentOS为例:

service  crond  start ,//启动服务,   service  crond  stop ,,//关闭服务,   service  crond  restart //重启服务,   service  crond  reload ,//重载配置,   service  crond  status ,//服务状态

在Linux中使用crontab时需要注意哪些问题