在Linux中使用crontab需要注意什么?我相信很多没有经验的人对此无能为力。因此,本文总结了问题产生的原因及解决方法。希望你能通过这篇文章解决这个问题。
Crontab是用于设置周期性执行的指令。它的守护进程是crond。crontab分为两种配置模式,一种是用户级的crontab,一种是系统级的crontab。这里我们分开说。
用户级crontab
当用户使用新的循环工作计划时,crontab命令可以被crontab -e的所有用户使用,普通用户只能为自己设置计划的任务。然后自动写/var/spool/cron/usename
用户控制文件
/etc/cron.allow:
写可以使用crontab的用户,只有这个文件中的用户可以使用crontab,相当于白名单
/etc/cron.deny:
禁止使用crontab的用户写,只禁止该文件中的用户使用crontab,相当于黑名单
/etc/cron.allow的优先级高于/etc/cron.deny,为避免混淆,建议只使用其中一个。
命令
crontab[-uus name][-l |-e |-r]
参数:
-u:只有root可以执行此任务,即帮助其他用户创建/删除crontab工作计划
-e:调用vi编辑crontab的工作内容
-l:列出了crontab的工作
-r:删除所有crontab工作内容。语法
# .分钟(0-59)
# |.-小时(0-23)
# | |.-日期(1-31)
# | | |.-月(1-12)或1月、2月、3月、4月.
便宜美国vps# | | | |.-一周中的某一天(0-6)(周日=0或7)或周日、周一、周二、周三、周四、周五、周六
#|||||
# * * * * * *命令语法与系统级crontab非常相似,不同的是这里不需要指定执行用户,但是在系统级crontab(/etc/crontab)中是必需的。
例子如下:
*/10****/home/test.sh#每10分钟以当前用户身份执行/home/test.sh脚本
02***/home/test.sh每天2点
05,17***/home/test.sh#每天5: 00和17: 00
017 * *太阳/家/测试. sh#每周日17: 00
04,17 * *周日,周一/周六/周日
@reboot/home/test.sh#系统重启时,这里推荐一个在线小工具:在线生成cron表达式
系统级crontab
系统级crontab一般用于系统的日常任务。这种方法更方便、更直接地为其他用户设置调度任务,也可以指定shell执行。配置文件为/etc/crontab,只能由root用户编辑。
编辑/etc/crontab
默认内容如下:
SHELL=/bin/bash这是指定使用哪个SHELL接口
path=/sbin :/bin :/usr/sbin :/usr/bin在此指定文件搜索路径
如果有额外的STDOUT,通过电子邮件将数据发送给谁,您可以指定系统用户或电子邮件地址,如alliot@iots.vip
# for etail sseeman 4 fronta bs
#对象定义示例:
# .分钟(0-59)
# |.-小时(0-23)
# | |.-日期(1-31)
# | | |.-月(1-12)或1月、2月、3月、4月.
# | | | |.-一周中的某一天(0-6)(周日=0或7)或周日、周一、周二、周三、周四、周五、周六
#|||||
# * * * * * *用户名命令是:
按时间、日期、月份和星期执行用户任务命令
例如,我想添加一个计划任务,每10分钟以root用户身份执行/home/test.sh脚本,然后在后面添加:
*/10****root/home/test.sh注意这里,不要遗漏执行器根(不需要在用户级crontab中指定执行器),否则在/var/log/cron日志中会出现“ERROR (getpwnam())”失败,预定任务将无法正常运行。
重启服务
/>
一般来说Linux下的crontab会自动帮我们每分钟重新读取一次 /etc/crontab 的例行工作事项,但是出于某些原因或者是其他的Unix系统中,由于crontab是读到内存当中的,所以栽修改完 /etc/crontab 之后,可能并不会马上执行,这时候需要重启crontab服务。
这里以CentOS为例:
servicecrondstart//启动服务servicecrondstop//关闭服务servicecrondrestart//重启服务servicecrondreload//重载配置servicecrondstatus//服务状态
如果是CentOS 7则:
systemctlrestartcrond.service//重启服务systemctlstartcrond.service//启活动:慈云数据爆款香港服务器,CTG+CN2高速带宽、快速稳定、平均延迟10+ms 速度快,免备案,每月仅需19元!! 点击查看动服务systemctlstopcrond.service//停止服务systemctlreloadcrond.service//重载配置systemctlstatuscrond.service//服务状态
其他注意事项
取消不需要的输出
当执行结果或者执行的选项中有输出的数据时,该数据会通过mail发送给MAILTO指定的账号,若某一个调度一直出错,同时mail服务出现问题(事实上我根本就没开这个服务),将会产生大量的文件于 /var/spool/clientmqueue/ ,所以最好是将crontab里面的命令后面加上> /dev/null 2>&1
2>:重定向错误。2>&1:把错误重定向到输出要送到的地方。即把上述命令的执行结果重定向到 /dev/null ,即抛弃,同时,把产生的错误也抛弃。
检查日志
日志保存在 /var/log/cron 中
语法区别
crontab -e命令会检查语法,而vim编辑 /etc/crontab 则不会,这里注意的是,crontab -e不需要写执行者用户名,而 /etc/crontab 需要指定。
执行路径必须使用绝对路径,否则可能无法正常执行。
周与日、月不能共存,即你可以分别以周或者是日、月为单位进行循环,但不可指定“几月几号且为星期几”的模式工作。
看完上述内容,你们掌握在Linux中使用crontab时需要注意哪些问题的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
《在Linux中使用crontab时需要注意哪些问题》来自互联网同行内容,若有侵权,请联系我们删除!
还没有评论,来说两句吧...