cron服务执行定时任务

发布于:2024-12-18 ⋅ 阅读:(72) ⋅ 点赞:(0)

参考链接

cron表达式在线解析:quartz/Cron/Crontab表达式在线生成工具-BeJSON.com

定时任务运行时报错解决方法

运行脚本报 权限不够问题:

可以在脚本文件夹下直接执行 如下指令运行RequestAPI.sh 脚本

 ./RequestAPI.sh        

如果出现权限不够问题,运行如下指令:

chmod 777 ./RequestAPI.sh  或  chmod +x ./RequestAPI.sh     开放脚本文件权限

cron相关命令

命令功能

命令

说明

启动服务 service crond start 启动文件路径:/sbin/service crond start
关闭服务 service crond stop
重启服务 service crond restart
从新载入配置 service crond reload
查看服务状态 service crond status
创建编辑调度任务 crontab -e 编辑的是/var/spool/cron下对应用户的cron文件,也可以直接修改/etc/crontab文件,输入定时任务,然后保存退出即可。
查看该用户下的crontab服务是否创建成功  crontab  -l  列出当前的所有调度任务
列出用户jp的所有调度任务 crontab -l -u jp
删除所有任务调度工作  crontab -r
查看服务是否已经运行 ps -ax | grep cron
查看某个用户的定时任务 crontab -u plan -l plan为指定的用户名
删除某个用户的定时任务 crontab -u plan -r
编辑某个用户的定时任务 crontab -u plan -e
加入开机自动启动 chkconfig --level 35 crond on


 

cron文件语法:

Minute Hour Day Month Dayofweek   command

   分     小时    日       月       星期     命令

0-59   0-23   1-31   1-12     1-7     command     (取值范围,表示周日一般一行对应一个任务)

记住几个特殊符号的含义:

“*”代表取值范围内的数字,
         “/”代表”每”,
         “-”代表从某个数字到某个数字,
         “,”分开几个离散的数字

     每个字段代表的含义如下:
     Minute             每个小时的第几分钟执行该任务
     Hour               每天的第几个小时执行该任务
     Day                 每月的第几天执行该任务
     Month             每年的第几个月执行该任务
     DayOfWeek     每周的第几天执行该任务
     Command       指定要执行的程序
     在这些字段里,除了“Command”是每次都必须指定的字段以外,其它字段皆为可选字段,可视需要决定。对于不指定的字段,要用“*”来填补其位置。*号之间需要有空格,表示每一个数字位,如果使用 / 说明每的时候,前面必须加星号

crontab每分钟定时执行:


*/1 * * * * service mysqld restart   ##每隔1分钟执行一次
*/10 * * * * service mysqld restart  ##每隔10分钟执行一次,从启动后开始的第一个十分钟开始执行,例如6:25开启启动,6:30执行第一次,然后6:40····

crontab每小时定时执行:

0 */1 * * * service mysqld restart   ##每1小时执行一次

0 */2 * * * service mysqld restart   ##每2小时执行一次

0 */12 * * * service mysqld restart   ##每12小时执行一次,例如:8:36分启动,从启动开始,到12点执行第一次,然后0:00执行第二次

crontab每天定时执行:

0 10 * * * service mysqld restart    ##每天10点执行

30 19 * * * service mysqld restart   ##每天19点30分执行

1 12 * * * service mysqld restart    ##每天12点01分执行

1 0 * * * service mysqld restart    ##每天0点01分执行

crontab每周定时执行:

0 10 * * 1 service mysqld restart    ##每周一10点执行

30 17 * * 5 service mysqld restart   ##每周五17点30分执行

crontab每年定时执行:

0 10 1 10 * service mysqld restart   ##每年的10月1日10点执行

0 20 8 8 * service mysqld restart    ##每年的8月8日20点执行

定时运行脚本命令举例

创建脚本文件夹(mkdir命令)并命名为Userscript,在脚本文件夹中创建脚本文件(touch命令),以功能命名,例如请求接口可以命名为RequestAPI.sh

创建一个文件名为result_list.yaml文件

运行crontab -e ,添加如下内容,先 cd到  脚本 目录,然后 再  && 执行脚本

*/10 * * * * cd /root/Scriptfile/RequestAPI && ./RequestAPI.sh        每十分钟运行一次/root/Scriptfile/ RequestAPI文件夹下RequestAPI.sh 脚本

0 */1 * * * cd /root/Scriptfile/RequestAPI && ./RequestAPI.sh        每一小时运行一次/root/Scriptfile/ RequestAPI文件夹下RequestAPI.sh 脚本

 重新加载定时器

##如果是修改定时器,设置完成之后需要重新加载定时器,否则会执行修改前的定时器

service crond reload

         普通用户执行corntab 需要先安装crontabs,      sudo yum install crontabs

         接收API接口的文件使用 yaml 格式,json 格式文件得单独安装插件打开

​
#!/bin/sh

#打印开始执行时间

starttime=$(date +%Y-%m-%d\ %H:%M:%S)

#将开始执行时间保存到result_list.yaml文件中

echo $starttime >> result_list.yaml

#调用接口,并把接口返回的数据保存到result_list.yaml文件中

curl --location --request POST 'https://www.mellaserver.com/api/mellaserver/user/mellaLogin' \

 --header 'Content-Type: application/json' \

 --data '{"email": "123@qq.com","hash": "123456","identityTypeId":1}' >> result_list.yaml

#打印执行结束时间

endtime=$(date +%Y-%m-%d\ %H:%M:%S)

echo $endtime >> result_list.yaml

​

定时访问接口举例

0 0 * * * wget http://192.144.141.166:8083/qingzhutool/hotel/recommend/sendmail/2bigAreaManager

定时请求接口数据举例

访问接口数据格式:

curl --location --request POST '填写url' \
--header 'xxxx: xxxxxxxxxxxxx' \
--header 'Content-Type: application/json' \
--data 'JSON格式'

举例

​
##以下为postman接口转换出命令,已在苹果电脑命令行验证

curl --location --request POST 'https://www.mellaserver.com/api/mellaserver/user/mellaLogin' \

--header 'Content-Type: application/json' \

--data-raw '{

    "email": "123@qq.com",

    "hash": "123456",

    "identityTypeId":1

}'

##以下为linux可执行命令,--date后面-raw删掉了,已验证

curl --location --request POST 'https://www.mellaserver.com/api/mellaserver/user/mellaLogin' \

> --header 'Content-Type: application/json' \

> --data '{"email": "123@qq.com","hash": "123456","identityTypeId":1}'

​

-H/--header <line>                      自定义头信息传递给服务器

-X/--request <command>           指定什么命令

-d/--data <data>                         HTTP POST方式传送数据

--location                                     Follow redirects (H) 跟随重定向

--raw                                            Do HTTP "raw", without any transfer decoding (H) 执行HTTP“raw”,无需任何传输解码
 

curl发起http请求,追加到已有文件

#从nacos配置中心拉取配置数据
#!/bin/bash
RESULT=$(curl -s "http://localhost:8844/nacos/v1/cs/configs?dataId=global-config.yaml&group=test&tenant=global-config-info-namespace")
echo $RESULT >> default_values.yaml
 


定时任务详细说明 


在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron]。cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。
cron的配置文件称为“crontab”,是“cron table”的简写。


 
1、cron在3个地方查找配置文件
/var/spool/cron/ 这个目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名。
/etc/crontab 这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab。
/etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。
 
2、权限
crontab权限问题到/var/adm/cron/下一看,文件cron.allow和cron.deny是否存在
用法如下: 
1、如果两个文件都不存在,则只有root用户才能使用crontab命令。 
2、如果cron.allow存在但cron.deny不存在,则只有列在cron.allow文件里的用户才能使用crontab命令,如果root用户也不在里面,则root用户也不能使用crontab。 
3、如果cron.allow不存在, cron.deny存在,则只有列在cron.deny文件里面的用户不能使用crontab命令,其它用户都能使用。 
4、如果两个文件都存在,则列在cron.allow文件中而且没有列在cron.deny中的用户可以使用crontab,如果两个文件中都有同一个用户,
以cron.allow文件里面是否有该用户为准,如果cron.allow中有该用户,则可以使用crontab命令。

4、在crontab文件中如何输入需要执行的命令和时间
该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。
每个域之间使用空格或者制表符分隔。格式如下: 
minute hour day-of-month month-of-year day-of-week commands
分钟 小时 每个月的哪天 每年的哪月 每个星期的礼拜几 需执行的命令
合法值 00-59 00-23 01-31 01-12 0-6 (0 is sunday) commands(代表要执行的脚本)
除了数字还有几个个特殊的符号就是"*"、"/"和"-"、",",*代表所有的取值范围内的数字,"/"代表每的意思,"/5"表示每5个单位,"-"代表从某个数字到某个数字,","分开几个离散的数字。
 
几个例子:
每五分钟执行一次: */5 * * * *
每小时执行一次 : 0 * * * *
每天执行一次: 0 0 * * *
每周执行一次: 0 0 * * 0
每月执行一次: 0 0 1 * *
每年执行一次: 0 0 1 1 *
 
每天早上6点 
0 6 * * * echo "Good morning." >> /tmp/test.txt //注意单纯echo,从屏幕上看不到任何输出,因为cron把任何输出都email到root的信箱了。
 
每两个小时 
0 */2 * * * echo "Have a break now." >> /tmp/test.txt  
 


cron服务命令的一些参数与说明:

crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数  
  crontab -l //列出某个用户cron服务的详细内容
  crontab -r //删除没个用户的cron服务
  crontab -e //编辑某个用户的cron服务
  比如说root查看自己的cron设置:crontab -u root -l
  再例如,root想删除fred的cron设置:crontab -u fred -r
  在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e
  进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt
        任务调度的crond常驻命令
        crond 是linux用来定期执行程序的命令。当安装完成操作系统之后,默认便会启动此

任务调度命令。crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工

作便会自动执行该工作。


网站公告

今日签到

点亮在社区的每一天
去签到