在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时需要注意哪些问题