linux 之 crond定时任务

article/2025/10/16 3:49:50

一、crond简介

crond 是linux下用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 目录

    文章目录

    前言

    一、系统任务调度

    二、crond服务

    1.安装crontab:

    常用命令:

    2.操作设置

    新增调度任务可用两种方法:设置用户自定义定时任务

     vi /etc/crontab 

    操作案例




前言

crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务 工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

Linux下的任务调度分为两类,系统任务调度和用户任务调度。


提示:以下是本篇文章正文内容,下面案例可供参考

一、系统任务调度

系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。/etc/crontab文件包括下面几行:

前 四行是用来配置crond任务运行的环境变量,第一行SHELL变量指定了系统要使用哪个shell,这里是bash,第二行PATH变量指定了系统执行 命令的路径,第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务 执行信息给用户。第四行 HOME=/ //使用者运行的路径,这里是根目录  
# run-parts  注意”run-parts”这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名了

用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。

[root@jyzbxx ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root# For details see man 4 crontabs# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

crontab文件的含义:

用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

minute   hour   day   month   week   command

其中:

minute: 表示分钟,可以是从0到59之间的任何整数。

hour:表示小时,可以是从0到23之间的任何整数。

day:表示日期,可以是从1到31之间的任何整数。

month:表示月份,可以是从1到12之间的任何整数。

week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。

command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

配上说明图:

在以上各个字段中,还可以使用以下特殊字符:

星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”

中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

二、crond服务

关于定时任务,首先需弄清的概念:

(1).crond是一个daemon类程序,路径为/usr/sbin/crond。默认会以后台方式启动,service或systemctl方式启动crond默认也是后台方式的,两者没发现什么区别。

(2).crondtab是管理crontab file的工具,而crontab file是定义定时任务条目的文件。

(3).crontab file存在于多处,包括系统定时任务文件/etc/crontab和/etc/cron.d/*,还有独属于各用户的任务文件/var/spool/cron/USERNAME。

再就是crontab命令:

1.安装crontab:

yum install crontabs     # 安装
systemctl enable crond     (设为开机启动) 
systemctl start crond    (启动crond服务) 
systemctl status crond     (查看状态)

服务操作说明:

service crond start //启动服务service crond stop //关闭服务service crond restart //重启服务service crond reload //重新载入配置service crond status // crontab服务状态设置用户自定义定时任务 
vi /etc/crontab 保存生效 加载任务,使之生效:
crontab /etc/crontab查看任务:
crontab -l 要检查crontab 任务执行情况,可以查看crontab的日志 
vi /var/log/cron

常用命令:

-l:列出定时任务条目
-r:删除当前任务列表终端所有任务条目
-i:删除条目时提示是否真的要删除
-e:编辑定时任务文件,实际上编辑的是/var/spool/cron/*文件
-u:操作指定用户的定时任务

2.操作设置

查看python环境变量路径

which python

新增调度任务可用两种方法:设置用户自定义定时任务

 vi /etc/crontab 

crontab -e

在命令行输入: 
crontab -e 然后添加相应的任务,wq存盘退出。
直接编辑
/etc/crontab 文件,即 vi /etc/crontab,添加相应的任务。

(1).新增调度任务 内容 - 任务

0 8,10,13,14,18,20,21 * * * /usr/python /home/py/main.py>>/home/log.log
含义:每天8点10点13点14点18点20点21点执行任务 
/usr/python 为python环境变量目录就是之前建连生成的文件
/home/py/main.py 为爬虫主程序路径
>>/home/log.log 在/home路径下生成名为log的爬虫print日志文件crontab -e# 如下
* * * * * python /home/test_scan.py         -> 每分钟执行一次home 目录下的python程序 test_scan.py */30 * * * * python /home/test_scan.py      -> 每30分钟执行一次 test_scan.py5,15 8-12 */2 * * python /home/test_scan.py -> 每隔两天的上午8点到12点的第5和第15分钟执行 test_scan.py# 记录linux设置定时执行python脚本以及输出到指定文件
crontab -e
*/5 * * * * root python /home/notify.py >> /home/scripts/kobe/logForNotify.log 2>&1

(2).方法二:在cron配置文件中写入多条sleep命令和其他命令。

这种方式很繁琐,但是更精确。如果定义到每秒级别就得写60行cron记录。

由此能看出,秒级的任务本就不是crond所擅长的。实际上能用到秒级的任务也比较少。

vi /etc/crontab* * * * * ls /tmp
* * * * * sleep 3 && ls /tmp
* * * * * sleep 6 && ls /tmp
* * * * * sleep 9 && ls /tmp
* * * * * sleep 12 && ls /tmp
* * * * * sleep 15 && ls /tmp
* * * * * sleep 18 && ls /tmp
* * * * * sleep 21 && ls /tmp
* * * * * sleep 24 && ls /tmp
* * * * * sleep 27 && ls /tmp
* * * * * sleep 30 && ls /tmp
…
* * * * * sleep 57 && ls /tmp

(3)让Python脚本定时启动

准备好定时启动的脚本auto.py

用root权限编辑以下文件

1

sudo vim /etc/crontab

在文件末尾添加以下命令

1

2 * * * * root /usr/bin/python3 /home/edgar/auto.py > /home/edgar/auto.log

以上代码的意思是每隔两分钟执行一次脚本并打印日志。

(4)crontab编写解释 

基本格式

1

2

* * * * * user command

分 时 日 月 周 用户 命令

(5)举例说明

1、每分钟执行一次

1

* * * * * user command

2、每隔2小时执行一次

1

* */2 * * * user command (/表示频率)

3、每天8:30分执行一次

1

30 8 * * * user command

4、每小时的30和50分各执行一次

1

30,50 * * * * user command(,表示并列)

4、每个月的3号到6号的8:30执行一次

1

30 8 3-6 * * user command (-表示范围)

5、每个星期一的8:30执行一次

1

30 8 * * 1 user command (周的范围为0-7,0和7代表周日)


操作案例

1. 创建 *.sh 文件

#!/bin/bash
nohup  /usr/local/python/bin/python3 /home/py/spiders/zhaobiao/zgcgw.py >/dev/null 2>&1  &
#nohup  /usr/local/python/bin/python3 /home/py/spiders/zhaobiao/ggzy.py  >/dev/null 2>&1  &
#nohup  /usr/local/python/bin/python3 /home/py/spiders/zhaobiao/zycg.py  >/dev/null 2>&1  &

2. 编辑 vi /etc/crontab 文件 ,然后指定 *.sh 文件。 当然也可以按上面直接指定 定时任务

提示:crontab -e 是局部操作 。 vi /etc/crontab 是全局操作

# 每天10和15和19和23点半执行 *.sh 文件
30 10,15,19,23 * * * root /home/py/*.sh

4. 保存生效 加载任务,使之生效:

crontab /etc/crontab

5. 重启 刷新配置  在查看状态

service crond stop //关闭服务
service crond start //启动服务service crond restart //重启服务service crond reload //重新载入配置service crond status // crontab服务状态


http://chatgpt.dhexx.cn/article/tTC6d7Lf.shtml

相关文章

crond服务总结

昨天翻阅程序发现服务器端管理程序的启动方式很特别,在之前是由init进程启动程序脚本里的进程,昨天发现服务程序并没有在任何脚本中有启动的体现,但是服务程序确实是启动了,经过一番查找发现原来是crond定时启动被触发然后启动了服…

crond

Linux中的crond:设置周期性被执行的指令 crond与crontab密不可分,简言之,crond是crontab的一个守护进程。 crontab是一个命令,它从标准输入设备读取指令,存放于“contab文件”中,供以后读取和执行。 crond时…

linux 很多CROND进程,linux添加定时任务crond

1.crontab –e:编辑当前定时任务 保存完重新crond : service crond restart 2. crontab用法 crontab –e : 修改 crontab 文件,如果文件不存在会自动创建。 crontab –l : 显示 crontab 文件。 crontab -r : 删除 crontab 文件。 crontab -ir : 删除 crontab 文件前…

crond使用指南

crontab 为定时执行脚本命令,我学习这个的目的是为了定时执行校园网登录脚本,以防止服务器内网穿透掉线。 1. 编写联网脚本 2. 赋予脚本执行权限 3. 安装crond yum install crontabs -y systemctl enable crond #设为开机启动 systemctl start crond…

linux下crond服务,Linux之定时任务Crond详解

定时任务Crond介绍 Crond是linux系统中用来定期执行命令/脚本或指定程序任务的一种服务或软件,一般情况下,我们安装完Centos5/6 linux操作系统之后,默认便会启动Crond任务调度服务。 Crond服务会定期(默认每分钟检查一次)检查系统…

Linux crond命令使用介绍

目录 前言一、crond简介系统任务调度用户任务调度 二、crond服务三、crontab命令详解1.命令格式2.命令功能3.命令参数4.常用方法1). 创建一个新的crontab文件2). 列出crontab文件3). 编辑crontab文件4). 删除crontab文件5). 恢复丢…

linux 查看crond服务器,CentOS安装crond服务

初学Linux, 太多太多的问题,让我不得不有头疼的时候,比如学到Cron建立计划任务时,却发现我的虚拟机没有安装cron本身, 为了安装这个,我也花了不少周折,现总结如下: 1.先检查Linux是否已经安装cr…

定时任务crond

一、定时任务(crond) 1.什么crond:crond就是计划任务,类似于我们平时生活中的闹钟,定点执行 。2.为什么要用crond:计划任务主要是做一些周期性的任务,比如: 凌晨3点定时备份数据。或11点开启网站抢购接口,1…

linux crond定时任务,Linux之定时任务Crond使用

Linux之定时任务Crond使用 一、用法 crond服务是linux系统自带的服务,是不需要手动安装的; crond服务是一种守护进程; Linux中的用户使用contab命令来配置corn任务; crontab –e : 修改 crontab 文件,如果文件不存在会自动创建; crontab –l : 显示 crontab 文件; cront…

Linux的基本操作——crond定时任务

一、crond简介 1、基本介绍 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每…

数组之二维数组

目录 一、二维数组的定义与引用 1、二维数组的定义 2、二维数组的引用 二、二维数组的赋值 1、二维数组的初始化 三、二维数组的应用举例 一、二维数组的定义与引用 1、二维数组的定义 一般格式: 类型说明符 数组名 [常量表达式1] [常量表达式2]; 其中…

JavaScript一维数组转二维数组

[1, 2, 3, 4, 5, 6, 7, 8] 实现效果 [[1, 2, 3, 4], [5, 6, 7, 8]] 1. slice截取 function fn(arr, num) {let newArr []const total Math.ceil(arr.length / num)console.log(total);for (let i 0; i < total; i) {a arr.slice(i * num, (i 1) * num)newArr…

js一维数组转二维数组(生成二维数组)

昨天遇到了一个需要对后端传来的一段数据做操作&#xff0c;是将一维数组转为二维数组&#xff0c;思考了半天&#xff0c;夜晚又和朋友讨论了一下&#xff0c;思路如下。&#xff08;毕竟我只是个切图仔&#xff09; let classRes [{className: 05,name: a1,age: 12,sex: 1},…

JS二维数组赋值问题

背景 定义二维数组并赋值 let list new Array(5).fill(new Array(3).fill(0))此时在给二维数组赋值时使用如下代码&#xff1a; list[2][1] 2看下赋值结束后的打印结果&#xff1a; 未达到预期。 ES6解析 我们看下阮一峰在es6中对fill的定义&#xff1a; 理解 这样就…

JavaScript 二维数组转一维数组

目录 1. flat() 2. reduceconcat 3. [ ].concat 4. concat.apply 5. toString split &#xff08;字符串或数值&#xff09; 6. 遍历判断 7.多维数组转一维数组 1. flat() 语法&#xff1a;var newArray arr.flat([depth]) depth(深度)&#xff1a;指定要提取嵌套数…

JavaScript生成二维数组

方法一&#xff1a; new Array(x).fill(new Array(y).fill(0)) 但注意&#xff0c;当一个对象被传递给fill方法时&#xff0c;填充数组的是这个对象的引用。即二维数组的第一个维度中的每一个数组都指向同一个引用&#xff0c;如果向第一个维度中的任一元素执行push&#xff0c…

js一维数组转二维数组

使用场景举例&#xff1a;接口返回一个数组对象&#xff0c;展示时每行固定显示n个&#xff0c;则可将返回的数组转成二维数组[[...n], [...n]...]的形式循环展示。 a.数组元素为基本类型&#xff1a; let baseArray [1, 2, 3, 4, 5, 6, 7, 8];len len baseArray.length;let …

js二维数组变为一维数组

1、用es5的reduce和concat组合 let list[[1,2,3],[4,5,6],[7,8],[9]]let listslist.reduce((a,b)>a.concat(b))console.log(lists)reduce的用法 数组方法reduce用来迭代一个数组&#xff0c;并且把他累积到一个值中。 使用 reduce 方法时&#xff0c;你要传入一个回调函数…

JavaScript 二维数组

二维数组&#xff1a;人为起的名字 二维数组本质上是以数组作为数组元素的数组&#xff0c;即“数组的数组”&#xff0c;类型说明符 数组名[常量表达式][常量表达式]。二维数组又称为矩阵&#xff0c;行列数相等的矩阵称为方阵。对称矩阵a[i][j] a[j][i]&#xff0c;对角矩阵…

js 二维数组

js二维数组 我们经常会用到二维数组&#xff0c;但是javaScript没有二维数组&#xff0c;那么我们应该咋办呢&#xff1f;就是在一维数组里面在创建一个一维数组。 var arr new Array(10); for (var i 0; i < arr.length; i) {arr[i]new Array(8); //不一定写for循环赋值…