关于crontab定时任务命令解读

 更新时间:2024年07月11日 09:02:49   作者:为什么要做囚徒  
这篇文章主要介绍了关于crontab定时任务命令的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、crontab概述

  • crontab:是一个用于管理、编辑和查询用户定时任务的命令行工具。通过 crontab 命令,用户可以添加、修改、删除和列出定时任务,以实现自动化执行特定任务。
  • cron:是一个在后台运行的系统服务,负责按照预设时间规则来执行指定的定时任务。cron 守护进程会在任务所指定的时间到达时自动执行相应的命令或脚本文件,并将执行结果记录在日志文件中。

因此,crontab 主要用于管理和维护定时任务的配置信息,而 cron 则负责实际执行这些定时任务。

需要注意的是,在某些 Linux 发行版中,cron 和 crontab 可能被打包成同一个软件包,并且往往默认安装在系统中。

因此,在使用 crontab 命令之前,建议先确认系统是否安装了 cron 服务。

总之,cron 和 crontab 都是用于管理和维护定时任务的重要工具和服务,它们的作用互补且不可替代。

二、crontab安装

yum install cronie

三、crontab常用操作命令

1.启动、关闭以及状态查看

# 状态查看
systemctl status crond
# 启动
systemctl start crond
# 关闭
systemctl stop crond
# 重启
systemctl restart crond

2.列出当前用户的所有定时任务

crontab -l

3.编辑当前用户的定时任务

crontab -e

运行上述命令后,会打开一个文本编辑器,可以在其中输入要执行的命令和时间规则。

格式如下:

* * * * * command

其中,五个星号分别表示分钟、小时、日、月、周几,command 表示要执行的命令或脚本文件路径。

例如,以下是每天凌晨 3 点执行 /backup.sh 脚本的定时任务配置:

0 3 * * * /backup.sh

4.删除当前用户的所有定时任务

crontab -r

5.查看帮助信息

crontab -h

需要注意的是,crontab 命令只适用于当前用户。

如果需要编辑其他用户的定时任务,需要使用 root 权限。

可以使用以下命令来切换到 root 用户,并编辑指定用户的定时任务:

su -
crontab -u username -e

其中,username 表示要编辑定时任务的用户名。

总之,在 CentOS 中,可以使用 crontab 命令来添加、修改和删除定时任务。

可以使用 crontab -e 命令编辑当前用户的定时任务,crontab -u username -e 命令编辑其他用户的定时任务,并且可以使用 crontab -l 和 crontab -r 命令查看当前用户的定时任务列表和删除所有定时任务。

四、添加定时任务

在 Linux 系统中,可以使用两种方法来新增调度任务:

1. 使用 crontab -e 命令

可以使用 crontab 命令来添加、编辑和删除当前用户的定时任务。具体步骤如下:

  • 运行命令 crontab -e,进入 crontab 编辑器;
  • 在编辑器中添加要执行的任务,例如:* * * * * echo "hello world" >> /home/tmp.txt
  • 保存并退出编辑器,此时新增的定时任务就会生效。

需要注意的是,crontab 命令只能用于当前登录用户的定时任务管理。

2. 直接编辑 /etc/crontab 文件

可以直接编辑 /etc/crontab 文件来新增系统级别的定时任务。具体步骤如下:

  • 使用 root 权限运行命令 vi /etc/crontab,打开 /etc/crontab 文件;
  • 在文件末尾添加要执行的任务,例如:* * * * * root echo "hello world" >> /home/tmp.txt必须指定用户,要不然不执行
  • 保存并关闭文件,此时新增的定时任务就会生效。

需要注意的是,直接编辑 /etc/crontab 文件新增的定时任务是针对系统级别的,可以被所有用户共享。同时,如果需要修改或删除该任务,也需要使用 root 权限进行操作。

无论是使用 crontab 命令还是直接编辑 /etc/crontab 文件,都需要设置正确的时间规则和要执行的命令。同时,还需要注意文件的格式和编码方式,避免出现语法错误或者乱码等问题。

以上两种方式都无需重启或加载,直接生效

注意:当程序在你所指定的时间执行后,系统会发一封邮件给当前的用户,显示该程序执行的内容,若是你不希望收到这样的邮件,请在每一行空一格之后加上 > /dev/null 2>&1 即可,如:

`* * * * * root echo "hello world" >> /home/tmp.txt > /dev/null 2>&1`

五、时间格式详解

# 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

时间格式如下:

t1 t2 t3 t4 t5 program

其中 t1 是表示分钟,t2 表示小时,t3 表示一个月份中的第几日,t4 表示月份,t5 表示一个星期中的第几天。program 表示要执行的程序。

  • 当 t1 为 * 时表示每分钟都要执行 program,t2 为 * 时表示每小时都要执行程序,其余类推
  • 当 t1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,t2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推
  • 当 t1 为 */n 时表示每 n 分钟个时间间隔执行一次,t2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推
  • 当 t1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,t2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其余类推

示例如下:

// 每月最后一天定时执行一次
0 0 L * *

// 每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "hello world":
20 0-23/2 * * * echo "hello world"

六、使用异常记录

1./etc/crontab方式添加的定时任务不执行

# 不执行
* * * * * echo "hello world" >> /home/tmp.txt;
# 执行  必须指定用户
* * * * * root echo "hello world" >> /home/tmp.txt;

2.如果我们使用 crontab 来定时执行脚本,无法执行,但是如果直接通过命令(如:./test.sh)又可以正常执行,这主要是因为无法读取环境变量的原因。

  • 所有命令需要写成绝对路径形式,如: /usr/local/bin/docker。
  • 在 shell 脚本开头使用以下代码:
#!/bin/sh

. /etc/profile
. ~/.bash_profile
  • 在 /etc/crontab 中添加环境变量,在可执行命令之前添加命令 . /etc/profile;/bin/sh,使得环境变量生效,例如:
20 03 * * * . /etc/profile;/bin/sh /var/www/runoob/test.sh

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 利用logsave如何将命令输出保存起来

    利用logsave如何将命令输出保存起来

    logsave命令运行给定的命令,并将命令的输出信息保存到指定的日志文件中。下面这篇文章主要给大家介绍了关于利用logsave如何将命令输出保存起来的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-05-05
  • ubuntu安装显卡驱动和cuda教程

    ubuntu安装显卡驱动和cuda教程

    这篇文章主要介绍了ubuntu安装显卡驱动和cuda教程,文中附有详细的图文安装步骤以及安装配置代码,跟着本文来进行操作,有需要的朋友可以参考下
    2021-09-09
  • Nginx虚拟主机多server_name的顺序问题

    Nginx虚拟主机多server_name的顺序问题

    今天在配置Nginx + PHP + MediaWiki中,发现一个问题:MediaWiki所在的Nginx虚拟主机绑定了多个域名,但是不管通过什么域名访问MediaWiki首页,都会被跳转到其中的一个域名上。
    2008-12-12
  • linux环境安装node.js开发环境搭建图文教程

    linux环境安装node.js开发环境搭建图文教程

    这篇文章主要介绍了 linux环境安装node.js开发环境搭建图文教程的相关资料,需要的朋友可以参考下
    2016-10-10
  • Centos 7之Firewalld相关命令详细介绍

    Centos 7之Firewalld相关命令详细介绍

    这篇文章主要介绍了Centos 7之Firewalld相关命令详细介绍的相关资料,需要的朋友可以参考下
    2017-02-02
  • Linux如何启动SELinux

    Linux如何启动SELinux

    这篇文章主要介绍了Linux如何启动SELinux问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • CentOS 7.2搭建VNC远程桌面服务的方法

    CentOS 7.2搭建VNC远程桌面服务的方法

    本篇文章主要介绍了CentOS 7.2搭建VNC远程桌面服务的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • 【专家教程】xmrig挖矿病毒清除攻略,保护你的服务器免受侵害!

    【专家教程】xmrig挖矿病毒清除攻略,保护你的服务器免受侵害!

    面对日益猖獗的XMRig挖矿病毒,是时候采取行动了!这份攻略将带你一步步清除这个隐蔽的威胁,让你的设备再次安全起来,快来看看我们的秘诀,让病毒无处遁形!
    2024-02-02
  • Linux ln 命令的使用

    Linux ln 命令的使用

    这篇文章主要介绍了Linux ln 命令的使用,帮助大家更好的理解和使用Linux,感兴趣的朋友可以了解下
    2020-08-08
  • centos7.2搭建nginx的web服务器部署uniapp项目

    centos7.2搭建nginx的web服务器部署uniapp项目

    这篇文章主要介绍了centos7.2搭建nginx的web服务器部署uniapp项目,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10

最新评论