主机知识库
分享服务器知识

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

在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月.

# | | | |.-一周中的某一天(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//启动服务
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时需要注意哪些问题的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

(内容来源于IDC同行,若侵权,请联系我们删除)

赞(0)
文章名称:《在Linux中使用crontab时需要注意哪些问题》
文章链接:https://www.cmy.cn/host/15247.html
版权声明:茶猫云所有发布的内容,部分为原创文章,转载请注明来源!网络转载文章如有侵权请联系我们解决!
最新优惠:茶猫云VPS服务器