关于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

总结

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

相关文章

  • 在阿里云购买云服务器并安装宝塔面板的步骤

    在阿里云购买云服务器并安装宝塔面板的步骤

    这篇文章主要介绍了在阿里云购买云服务器并安装宝塔面板的步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Linux配置静态ip的详细流程步骤

    Linux配置静态ip的详细流程步骤

    这篇文章主要给大家分享介绍了关于Linux配置静态ip的详细流程步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-06-06
  • centos配置mutt和msmtp实现邮件发送

    centos配置mutt和msmtp实现邮件发送

    这篇文章主要为大家详细介绍了centos配置mutt和msmtp实现邮件发送,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • linux 和 dockerfile 中配置环境变量的方式总结

    linux 和 dockerfile 中配置环境变量的方式总结

    要熟悉 dockerfile 配置 linux 的知识不能少,所以本文将给大家总结 linux 与 dockerfile 中各种环境变量,需要的朋友可以参考下
    2023-07-07
  • Linux如何更改用户名或密码

    Linux如何更改用户名或密码

    这篇文章主要介绍了Linux如何更改用户名或密码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Ubuntu系统下网络配置文件解析与说明

    Ubuntu系统下网络配置文件解析与说明

    这篇文章主要给大家介绍了关于Ubuntu系统下网络配置文件的解析与说明,文中通过示例代码介绍的非常详细,对大家学习或者使用Ubuntu具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • Apache httpd 安装module mod_expires、mod_deflate的方法

    Apache httpd 安装module mod_expires、mod_deflate的方法

    Apache httpd 安装module mod_expires、mod_deflate的方法,需要的朋友可以参考下。
    2011-11-11
  • Linux中使用top命令的技巧

    Linux中使用top命令的技巧

    今天小编就为大家分享一篇关于Linux中使用top命令的技巧,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-09-09
  • linux多线程编程(四)

    linux多线程编程(四)

    linux中的线程是轻量级的线程,linux中的线程调度是由内核调度程序完成的,每个线程有自己的ID号。与进程相比,它们消耗的系统资源少、创建较快、相互间的通信也较容易。
    2014-08-08
  • centos系统为php安装memcached扩展步骤

    centos系统为php安装memcached扩展步骤

    这篇文章主要介绍了centos系统为php安装memcached扩展的步骤,大家参考使用吧
    2014-01-01

最新评论