Linux 命令之 crontab 计划任务与自动同步系统时间
发布日期:2021-06-23 19:02:36 浏览次数:9 分类:技术文章

本文共 8188 字,大约阅读时间需要 27 分钟。

目录


crontab 定时计划命令概述

1、Linux crontab 是用来定期执行程序的命令,当安装完成操作系统之后,默认便会启动此任务调度命令。---本文环境 CentOS 7.2

2、crond 命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

3、crontab 是用来让使用者在固定时间或固定间隔执行程序之用,类似Windows 的定时计划

crontab  语法:

crontab [ -u user ] file
crontab [ -u user ] { -l | -r | -e }

参数说明

  • -u user:用来设定指定用户的 crontab服务
  • -e : 编辑某个用户的crontab文件内容,没指定用户时表示编辑当前用户的crontab文件
  • -r : 删除某个用户的crontab文件,没指定用户时表示删除当前用户的crontab文件
  • -l :显示某个用户的crontab文件内容,没指定用户时表示显示当前用户的crontab文件内容

crontab  安装与启动

1、系统安装完成后,crontab 命令一般也是默认安装好了的,而且每次系统启动之后,crond 服务也是默认开启的

2、模糊查找:yum list |grep crontab ,当不知道 crontab命令包全名时,可以如此搜索

3、查看安装状态:yum list crontabs ,如下可知 crontab命令包全名为 “crontabs”,而且已经安装好了

4、安装:yum install crontabs,如果没有安装时,可以使用yum安装

[root@localhost ~]# yum list |grep crontabcrontabs.noarch                             1.11-6.20121102git.el7     @anaconda[root@localhost ~]# yum list crontabs已加载插件:fastestmirrorLoading mirror speeds from cached hostfile * base: mirrors.aliyun.com * extras: mirrors.aliyun.com * updates: mirrors.tuna.tsinghua.edu.cn已安装的软件包crontabs.noarch               1.11-6.20121102git.el7               @anaconda[root@localhost ~]#

查看 crontab 服务状态

查看服务状态,方式一:service crond status

查看服务状态,方式二:systemctl status crond.service

服务名称为 crond,systemctl命 令要在 CentOS7 及以后版本才有,,推荐方式是 systemctl

[root@localhost ~]# systemctl status crond.service● crond.service - Command Scheduler   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)   Active: active (running) since 五 2018-07-27 20:56:26 CST; 17min ago Main PID: 885 (crond)   CGroup: /system.slice/crond.service           └─885 /usr/sbin/crond -n7月 27 20:56:26 localhost.localdomain systemd[1]: Started Command Scheduler.7月 27 20:56:26 localhost.localdomain systemd[1]: Starting Command Scheduler...7月 27 20:56:27 localhost.localdomain crond[885]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 1% if used.)7月 27 20:56:27 localhost

开/关/重启 crontab  服务

同理也有 service 与 systemctl 两种方式

开启服务:service crond start ,systemctl start crond.service

重启服务:service crond restart , systemctl restart crond.service

关闭服务:service crond stop , systemctl stop crond.service

[root@localhost ~]# service crond stopRedirecting to /bin/systemctl stop  crond.service[root@localhost ~]# service crond statusRedirecting to /bin/systemctl status  crond.service● crond.service - Command Scheduler   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)   Active: inactive (dead) since 五 2018-07-27 21:21:14 CST; 8s ago  Process: 885 ExecStart=/usr/sbin/crond -n $CRONDARGS (code=exited, status=0/SUCCESS) Main PID: 885 (code=exited, status=0/SUCCESS)7月 27 20:56:26 localhost.localdomain systemd[1]: Started Command Scheduler.7月 27 20:56:26 localhost.localdomain systemd[1]: Starting Command Scheduler...7月 27 20:56:27 localhost.localdomain crond[885]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 1% if used.)7月 27 20:56:27 localhost.localdomain crond[885]: (CRON) INFO (running with inotify support)7月 27 21:21:14 localhost.localdomain systemd[1]: Stopping Command Scheduler...7月 27 21:21:14 localhost.localdomain systemd[1]: Stopped Command Scheduler.[root@localhost ~]#

crontab 定时任务表达式

1、用户创建的 crontab 定时中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为6个字段,前 5个是时间字段,第6个是要执行的命令,格式如下:minute    hour    day    month    week    command

2、格式说明:

minute:表示分钟,取值 [0,59] 之间的任何整数

hour:表示小时,取值 [0,23] 之间的任何整数

day:表示日期, 取值 [1,31] 之间的任何整数

month:表示月份,取值 [1,12] 之间的任何整数

week:表示星期几,取值 [0,7] 之间的任何整数,0和7都代表星期日

command:要执行的命令,可以是系统命令,也可以是用户编写的脚本文件,如*.sh

当 minute 为 “ * ” 时表示每分钟都要执行 command,hour 为 “ * ” 时表示每小时都要执行程序,其于类推

当 minute 为 " a-b " 时表示从第 a 分钟到第 b 分钟这段时间内每分钟整都要执行 command,hour 为 “ a-b ” 时表示从第 a 到第 b 小时内的没小时整都要执行,其于类推

当 minute 为 “ */n ” 时表示每 n 分钟个时间间隔执行一次,hour 为 " */n " 表示每 n 个小时时间间隔执行一次,其于类推

当 minute 为 “ a, b, c ” 时表示第 a, b, c 分钟都要执行,hour 为 a, b, c 时表示第 a, b, c 个小时整都要执行,其于类推

crontab 定时任务举例

一)每分钟向文本写入当前日期

1、直接使用 crontab -e  编辑当前用户的 crontab 定时计划文件内容即可,创建任务之后,使用 crontab -l 可以查看当前用户的crontab文件内容,crontab 文件修改之后立即生效,无需重启 crond.service 服务

[root@localhost /]# crontab -e*/1 * * * * date >> /home/dateLog.txt[root@localhost home]# crontab -l*/1 * * * * date >> /home/dateLog.txt

2、结果就是每分钟都会将系统当前时间输出到 /home/dateLog.txt 文件中去,/home/dateLog.txt文件不存在时,它默认会新建。

二)每天05:00重启系统

1、crontab -e 编辑当前用户 crontab文件,进入编辑模式,输入 0 5 * * * /sbin/reboot :

[root@localhost sbin]# crontab -e0 5 * * * /sbin/reboot

三)定时重启 Tomcat 服务器

1、每天凌晨6点整关闭Tomcat服务器,6点零5分再启动服务,后面的路径请以实际安装的为准

[root@localhost bin]# crontab -e0 6 * * * /usr/local/tomcat_1.8/apache-tomcat-8_1/bin/shutdown.sh5 6 * * * /usr/local/tomcat_1.8/apache-tomcat-8_1/bin/startup.sh

四)执行自定义脚本文件

1、在/home目录下新建一个 “test.sh”脚本文件,linux下的 *.sh文件类似于Windows下的bat文件

2、test.sh 可执行文件的内容很简单,就是往当前目录下的log.txt输入系统日期内容以及"haha"字符串

3、注意:很多时候*.sh脚本文件可以直接运行,但是通过crontab却不能运行,原因是因为crontab执行脚本的时候不会读取用户的环境变量等配置 ,解决办法是在 *.sh 文件的起始位置加上 "source /etc/profile" 即可

[root@localhost home]# ls[root@localhost home]# vim test.shsource /etc/profiledate >> /home/log.txtecho 'haha' >> /home/log.txt

4、保存然后退出,默认情况下,现在这个 test.sh 文件是没有权限的,需要为它赋予权限才能使用,chmod 赋予权限之后,test.sh文件会变成绿色,即表示可执行文件。

[root@localhost home]# ./test.sh-bash: ./test.sh: 权限不够[root@localhost home]# chmod 777 ./test.sh [root@localhost home]# lstest.sh[root@localhost home]#

5、定时执行,设置每隔 1 分钟执行一次 /home/test.sh 可执行文件

[root@localhost home]# lstest.sh[root@localhost home]# crontab -e*/1 * * * * /home/test.sh

五)其它示例

0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata   周一到周五每天下午 5:00 寄一封信给 alex@domain.name:20 0-23/2 * * * echo "haha"   每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"0 */2 * * * /sbin/service httpd restart  意思是每两个小时重启一次apache 50 7 * * * /sbin/service sshd start  意思是每天7:50开启ssh服务 50 22 * * * /sbin/service sshd stop  意思是每天22:50关闭ssh服务 0 0 1,15 * * fsck /home  每月1号和15号检查/home 磁盘 1 * * * * /home/bruce/backup  每小时的第一分执行 /home/bruce/backup这个文件 00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \;  每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。30 6 */10 * * ls  意思是每月的1、11、21、31日是的6:30执行一次ls命令

CentOS 自动同步系统时间

1、Linux 需要通过一些操作才能自动同步系统时间,比如虚拟机中的 CentOS 一段时间不用,它的系统时间就容易出现偏差,而当 CentOS 作为服务器运行时,也存在同样的问题,如果不加设置,也会出现时间偏差,此时对于做业务的服务器来说是非常严重的。

2、Linux 中自动同步时间的方式也有许多,这里介绍比较常用的 ntpdate 命令。

一:检查/设置时区

timedatectl status|grep 'Time zone'   #查看系统当前时区,如果不是中国时区(Asia/Shanghai),则需要设置

timedatectl set-local-rtc 1        #设置硬件时钟调整为与本地时钟一致

timedatectl set-timezone Asia/Shanghai         #设置时区为上海

[root@wangmaoxiong001 wangmx]# timedatectl status|grep 'Time zone'       Time zone: Asia/Shanghai (CST, +0800)[root@wangmaoxiong001 wangmx]# timedatectl set-local-rtc 1[root@wangmaoxiong001 wangmx]# timedatectl set-timezone Asia/Shanghaitimedatectl set-timezone Asia/Shanghai[root@wangmaoxiong001 wangmx]#

二、检查/安装 ntpdate

yum list ntpdate   #检查是否已经安装

yum install ntpdate  #未安装时,进行安装

[root@wangmaoxiong001 wangmx]# yum list ntpdate已加载插件:fastestmirror, product-id, search-disabled-repos, subscription-managerThis system is not registered with an entitlement server. You can use subscription-manager to register.Loading mirror speeds from cached hostfile * base: mirrors.ustc.edu.cn * extras: mirrors.ustc.edu.cn * updates: mirrors.ustc.edu.cn已安装的软件包ntpdate.x86_64                                                   4.2.6p5-29.el7.centos.2                                                    @base[root@wangmaoxiong001 wangmx]#

三:手动更新时间

ntpdate -u pool.ntp.org            #更新时间,后面的 pool.ntp.org、time1.aliyun.com 表示时间服务器地址,可以是任何有效的都可以

ntpdate -u time1.aliyun.com    #更新时间,后面的 pool.ntp.org、time1.aliyun.com 表示时间服务器地址,可以是任何有效的都可以

[root@wangmaoxiong001 wangmx]# date2020年 12月 14日 星期一 14:56:15 CST[root@wangmaoxiong001 wangmx]# ntpdate -u  pool.ntp.org13 Dec 14:57:02 ntpdate[2285]: step time server 84.16.73.33 offset -86374.039288 sec[root@wangmaoxiong001 wangmx]# date2020年 12月 13日 星期日 14:57:10 CST

四、定时更新时间

同步时间后,服务器过一段时间仍然有可能会出现偏差,因此最好设置 crontab 来定时同步时间,方法如下:

which ntpdate   #查看 ntpdate 安装的位置,通常是  /usr/sbin/ntpdate

crontab -e         #编辑任务计划,保存退出后,自动生效,无需重启。

* */1 * * * /usr/sbin/ntpdate -u pool.ntp.org >> /home/wangmx/a.txt 2>&1    #添加任务计划,每1小时更新一次时间,并将日志写入到 /home/wangmx/a.txt 文件中

* */1 * * * /usr/sbin/ntpdate -u pool.ntp.org >> /dev/null 2>&1      #添加任务计划,每1小时更新一次时间,输入输出信息不做记录

五、开机自动更新时间

vim /etc/rc.d/rc.local                   #编辑系统文件,系统启动后会自动执行此文件

ntpdate -u pool.ntp.org              #将命令添加到 rc.local 文件末尾,表示开机后自动更新系统时间

chmod +x /etc/rc.d/rc.local        #添加可执行权限

 

 

转载地址:https://wangmaoxiong.blog.csdn.net/article/details/81235245 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Swift基础-0007 【swift对象 结构体】
下一篇:Swift基础-0006 【swift函数调用】

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年03月19日 17时11分14秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

java web 防止sql注入攻击_JavaWeb防注入知识点(一) 2019-04-21
java ssm 异常分类_SSM项目常见的异常与处理提示(一) 2019-04-21
java定义矩形类_Java定义矩形类 2019-04-21
java变量怎么变常量_Java的常量与变量是什么?怎么学习呀? 2019-04-21
java开发招聘试题_客户化开发招聘试题-Java开发.doc 2019-04-21
java jdk win10 1335_win10下安装java jdk,tomcat 2019-04-21
java list二分查找_java中的ArrayList和LinkedList的二分查找速度比 | 学步园 2019-04-21
php中的变量名称用什么表示,PHP变量,方法,类等名称中的有效字符是什么? 2019-04-21
pic32mx是什么cpu_PIC32MX单片机外设库使用(Ⅰ)- 系统时钟及I/O口基本设置 2019-04-21
用c 在mysql上存图片_C 批量保存图片进 mysql 利用MYSQL_BIND插入longblob 2019-04-21
mysql 1045 28000_mysql报关于用户密码1045(28000),几种处理方法 (zhuan) 2019-04-21
solr比mysql的优势_Solr与Elasticsearch的优缺点比较总结和归纳 2019-04-21
华为博士招聘上机考试题目_牛客网-华为-2020届校园招聘上机考试-3 2019-04-21
python中for可以做变量名吗_Python中使用动态变量名的方法 2019-04-21
mysql 日期转换天数_MySQL 日期操作 增减天数、时间转换、时间戳 2019-04-21
java对象去重复_JAVA中List对象去除重复值的方法 2019-04-21
java bss_[转] .bss段和.data段的区别 2019-04-21
java上传图片损坏_大神求助 上传图片后 图片损坏 2019-04-21
java socket唯一标识符_Java Socket编程之常识网络基础知识 2019-04-21
java给xyz大小排序_java递归实现string xyz排序 2019-04-21