centos创建定时任务

centos创建定时任务,第1张

转自博客: https://www.cnblogs.com/SunArmy/p/13096861.html  ,在此博客的基础上进行测试

在centos上最常用的定时任务应该就是crontab了,在经过各种度娘之后有三种方式实现定时任务的方法,但是所用到的场景有所不同

(1)at适合仅执行一次就结束的调度命令,需要启动一个后端的atd服务。

(2)crontab 需要启动一个服务crond才行,crond服务通过crontab命令实现(3)anacron 无法周期性执行,只能以天为周期,但有个特点,在关机状态下未>执行的任务,下次开机时可以补上执行

这里也直讲最常用的crontab,主要其他两种我也没看过也没测试

关于crontab和crond

用到crontab那么就一定要知道crond,crond和crontab是不可分割的,crond我的理解是一个守护进程,或者说这才是我们定时任务的核心,crontab是一个编辑或者说是管理定时任务的工具

crontab我的理解就是crond服务处于启动状态,这个服务会默认每分钟去检测是否有需要执行的定时任务,所以crond不能守护秒级定时任务。而这个任务的具体内容是通过crontab来管理的,至于具体管理方式后面继续讲

一般情况下crond、crontab是安装好的,这里主要提一下万一没有crontab你别想着直接用yum去安装crond或者crontab因为你会发现找不到包,其实定时任务的包是cronie。(这里因为我遇到了所以提一下)

yuminstall -y cronie

这样就行了

systemctlstart  crond         启动服务

systemctlstop    crond         停止服务

systemctlrestart crond        重启服务

systemctlreload  crond         重载配置文件

systemctlstatus  crond         查看状态

crontab -u 设定某个用户的cron服务

crontab -l 显示crontab文件(显示已设置的定时任务)

crontab -e 编辑crontab文件(编辑定时任务)

crontab -r 删除crontab文件(删除定时任务)

crontab -i 删除crontab文件提醒用户(删除定时任务)

三种编辑定时任务的方式

定时任务格式(vi /etc/crontab 或者 crontab -e 进入配置文件中就可以看到了)

用户的定时任务分6段,分别是:分,时,日,月,周,命令

第1列表示分钟1~59  每分钟用*或者*/1表示

第2列表示小时1~23(0表示0点)

第3列表示日期1~31

第4列表示月份1~12

第5列标识号星期0~6(0表示星期天)

第6列要运行的命令

*:表示任意时间都,实际上就是“每”的意思。可以代表00-23小时或者00-12每月或者00-59分

-:表示区间,是一个范围,00 17-19* ** cmd,就是每天17,18,19点的整点执行命令

,:是分割时段,30 3,19,21 ** *cmd,就是每天凌晨3和晚上19,21点的半点时刻执行命令

/n:表示分割,可以看成除法,*/5 ** ** cmd,每隔五分钟执行一次

配置文件路径:vi /etc/crontab

在配置文件中,原本6个段的配置,我们需要在命令前面再加一个用户段

即:分 时 日 月 周 用户 命令/需要执行的脚本

如 * * * * * root  touch /root/11.txt   #以root账号每分钟在/root目录下创建一个11.TXT文件

直接添加到最后一行即可

执行结果

使用命令编辑相当于就是编辑当前用户的任务,所以不需要加用户字段,这里就是6段

* * * * *  /home/wsj/scheduledTest.sh

进入/var/spool/cron/

如果你执行了以上两种方式,你再进来看一下这个目录下的文件你可能会发现一点问题

这里的文件都是以用户名来命名的,你再打开你使用crontab -e 添加过任务的用户文件,原来crontab -e编辑的就是这里的文件,所以我们如果需要为哪个用户添加任务,只用编辑这个目录下对应用户的文件即可

* * * * *  每1分钟执行一次 

15,30,45 * * * *  每小时的第15、30、45分执行

15,30 10-11* * *  在上午10点到11点的第15和第30分钟执行

* */2 * * *   每两个小时执行一次

/etc/cron.deny# 该文件中所列用户不允许使用crontab命令 

/etc/cron.allow#   该文件中所列用户允许使用crontab命令 

/var/spool/cron/#   所有用户crontab文件存放的目录,以用户名命名 

/var/log/cron#   crond日志文件

crontab -e #创建一个定时任务

* * * * * touch /11.txt   #用当前账号(root)在根/ 目录下创建一个11.txt文件(若已存在会自动覆盖)

systemclt reload crond #重新加载crond进程(我在测试中没有重启也是照样能有效果,不知道是不是版本之间的差异)

结果

yum -y update

yum -y install cronie yum-cron

//-------------------

crontab任务配置基本格式:

b、重启crond

systemctl reload crond

systemctl restart crond

c、查看当前用户定时任务

crontab -l

d、通过日志查看是否生效

tail -f /logs/cron-cc.log

//---------------------

crontab设置的最小时间为每分钟,实现以秒为单位进行定时任务执行。

*/1 * * * * sh /root/shell/aa.sh

*/1 * * * * sleep 10 &&sh /root/shell/aa.sh

*/1 * * * * sleep 20 &&sh /root/shell/aa.sh

*/1 * * * * sleep 30 &&sh /root/shell/aa.sh

*/1 * * * * sleep 40 &&sh /root/shell/aa.sh

*/1 * * * * sleep 50 &&sh /root/shell/aa.sh

注意:aa.sh为执行脚本

*/1 * * * * sh /root/shell/aa.sh

*/1 * * * * sleep 20 &&sh /root/shell/aa.sh

*/1 * * * * sleep 40 &&sh /root/shell/aa.sh

注意:aa.sh为执行脚本

*/5 * * * * sh /root/shell/echo.sh

// 每天凌晨1点执行

0 1 * * * /home/testuser/test.sh

//-----------------------------------------------

crontab -l

调用/var/spool/cron/目录下相关用户的定时任务信息

查看定时任务日志

tail -f /var/log/cron

systemctl status crond.service

systemctl start crond.service

systemctl stop crond.service

systemctl restart crond.service

systemctl reload crond.service

把cron服务加入linux开机自启动

systemctl enable crond.service

systemctl is-enabled crond.service

ps -ef |grep crond|grep -v grep

//---------------------------------------------

注意:

路径问题

有些脚本涉及到文件 *** 作,文件路径不正确也会导致脚本无法正常执行,建议使用绝对路径,或者在执行脚本时,先进入该脚本的路径下,在执行。Crontab的command配置如下:

*/1 * * * * cd /root/shell &&./cron.sh

1、执行env指令得到当前的用户环境变量。

2、将PATH环境变量添加到crontab的第一行,如下图所示。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11443088.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存