Linux中的定时自动执行功能(at,crontab)

概念

在Linux系统中,提供了两种提前对工作进行安排的方式

  • at 只执行一次

  • crontab 周期性重复执行

通过对这两个工具的应用可以让我们在操作系统层面实现定时自动运行功能

实验环境

操作系统:CentOS Linux release 7.3.1611 (Core)

IP: 192.168.230.134

at介绍

at命令会,并且会执行一次

此功能会使用到atd工具,需要保证其为启动状态

[root@localhost ~]# systemctl status atd
● atd.service - Job spooling tools
Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2017-09-07 18:18:18 CST; 4h 2min ago
Main PID: 921 (atd)
CGroup: /system.slice/atd.service
└─921 /usr/sbin/atd -f Sep 07 18:18:18 localhost.localdomain systemd[1]: Started Job spooling tools.
Sep 07 18:18:18 localhost.localdomain systemd[1]: Starting Job spooling tools...

at使用

常用命令如下

[root@localhost ~]# at -help
Usage: at [-V] [-q x] [-f file] [-mMlbv] timespec ...
at [-V] [-q x] [-f file] [-mMlbv] -t time
at -c job ...
atq [-V] [-q x]
at [ -rd ] job ...
atrm [-V] job ...
batch

时间格式:

格式 示例 意义
HH:MM 01:01 下一次1点1分执行
HH:MM YYYY-MM-DD 01:00 2017-09-08 指定具体年月时间执行
HH:MM[am/pm]+number[minutes/hours/days/weeks] now+3 days 某时间点再加些时间后

at实例

创建测试用sh,并修改权限

[root@localhost ~]# vim test.sh

echo '豆姐威武'

[root@localhost ~]# chmod 755 test.sh
[root@localhost ~]# ./test.sh
豆姐威武

查看当前时间

[root@localhost ~]# date
Thu Sep 7 23:19:51 CST 2017

使用at命令,设定23:21执行test.sh命令,注意以Ctrl+d结束

[root@localhost ~]# at 23:21
at> /root/test.sh
at> <EOT>
job 5 at Thu Sep 7 23:21:00 2017

坐等一分钟后,收到系统给的信息,查看时间以及到了设定时间

You have new mail in /var/spool/mail/root
[root@localhost ~]# date
Thu Sep 7 23:21:04 CST 2017

查看系统收到的信息

[root@localhost ~]# cat /var/spool/mail/root

From root@localhost.localdomain  Thu Sep  7 23:21:00 2017
Return-Path: <root@localhost.localdomain>
X-Original-To: root
Delivered-To: root@localhost.localdomain
Received: by localhost.localdomain (Postfix, from userid 0)
id A139B243D2; Thu, 7 Sep 2017 23:21:00 +0800 (CST)
Subject: Output from your job 5
To: root@localhost.localdomain
Message-Id: <20170907152100.A139B243D2@localhost.localdomain>
Date: Thu, 7 Sep 2017 23:21:00 +0800 (CST)
From: root@localhost.localdomain (root) 豆姐威武

抄一个比较实用的脚本: 
定时关机

[root@localhost ~]# at 18:00 2017-09-10
at> /bin/sync
at> /bin/sync
at> /sbin/shutdown -h now
at> <EOT>
job 6 at Sun Sep 10 18:00:00 2017

将在2017/09/07 18:00自动关机

at命令的取消

查看当前at命令 
使用atq命令

[root@localhost ~]# atq
6 Sun Sep 10 18:00:00 2017 a root

取消命令 
使用atrm命令

[root@localhost ~]# atrm 6

crontab介绍

crontab命令会按照配置周期性的执行

他的记录会保存在/var/log/cron中

此功能需要用到crond服务,需要保证其状态正常

[root@localhost ~]# systemctl status crond
● crond.service - Command Scheduler
Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2017-09-07 18:18:18 CST; 5h 51min ago
Main PID: 920 (crond)
CGroup: /system.slice/crond.service
└─920 /usr/sbin/crond -n Sep 07 18:18:18 localhost.localdomain systemd[1]: Started Command Scheduler.
Sep 07 18:18:18 localhost.localdomain systemd[1]: Starting Command Scheduler...
Sep 07 18:18:18 localhost.localdomain crond[920]: (CRON) INFO (RANDOM_DELAY will be ...)
Sep 07 18:18:19 localhost.localdomain crond[920]: (CRON) INFO (running with inotify ...)
Hint: Some lines were ellipsized, use -l to show in full.

crontab使用

常用命令如下:

[root@localhost ~]# crontab -help
crontab: invalid option -- 'h'
crontab: usage error: unrecognized option
Usage:
crontab [options] file
crontab [options]
crontab -n [hostname] Options:
-u <user> define user
-e edit user's crontab
-l list user's crontab
-r delete user's crontab
-i prompt before deleting
-n <host> set host in cluster to run users' crontabs
-c get host in cluster to run users' crontabs
-s selinux context
-x <mask> enable debugging

时间格式:

*    *    *    *    *
- - - - -
| | | | |
| | | | |
| | | | +----- day of week (0 - 7) (Sunday=0 or 7)
| | | +---------- month (1 - 12)
| | +--------------- day of month (1 - 31)
| +-------------------- hour (0 - 23)
+------------------------- min (0 - 59)

crontab实例

还是使用之前创建的test.sh做实验

使用crontab命令新建计划

先查看当前时间

[root@localhost ~]# date
Thu Sep 7 23:52:12 CST 2017

创建计划,设定每天23:55执行 /root/test.sh脚本

[root@localhost ~]# crontab -e

55 23 * * * /root/test.sh

no crontab for root - using an empty one
crontab: installing new crontab

查看当前计划:

[root@localhost ~]# crontab -l
55 23 * * * /root/test.sh

坐等两分钟后:

[root@localhost ~]# date
Thu Sep 7 23:55:07 CST 2017
You have new mail in /var/spool/mail/root

查看记录:

[root@localhost ~]# cat /var/spool/mail/root
From root@localhost.localdomain Thu Sep 7 23:55:01 2017
Return-Path: <root@localhost.localdomain>
X-Original-To: root
Delivered-To: root@localhost.localdomain
Received: by localhost.localdomain (Postfix, from userid 0)
id 45D1028EB7; Thu, 7 Sep 2017 23:55:01 +0800 (CST)
From: "(Cron Daemon)" <root@localhost.localdomain>
To: root@localhost.localdomain
Subject: Cron <root@localhost> /root/test.sh
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
Precedence: bulk
X-Cron-Env: <XDG_SESSION_ID=52>
X-Cron-Env: <XDG_RUNTIME_DIR=/run/user/0>
X-Cron-Env: <LANG=en_US.UTF-8>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=root>
X-Cron-Env: <USER=root>
Message-Id: <20170907155501.45D1028EB7@localhost.localdomain>
Date: Thu, 7 Sep 2017 23:55:01 +0800 (CST) 豆姐威武

crontab计划的删除

如果需要删除一两个计划,直接使用crontab -e进入编辑页面删除 
如果要清空计划,-r即可

[root@localhost ~]# crontab -l
55 23 * * * /root/test.sh
[root@localhost ~]# crontab -r
[root@localhost ~]# crontab -l
no crontab for root

crontab补充

也可以直接编辑/etc/crontab文件来实现计划脚本

[root@localhost ~]# vim /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
 

但是使用这种方式有时候不会立刻生效,需要重启crond服务

Linux中的定时自动执行功能(at,crontab)的更多相关文章

  1. 转 Windows 7设置定时自动执行任务方法

    在使用电脑的时候可能会遇到一些需要无人值守让电脑自行执行任务后定时关机的情形,在Win7系统中,我们可以使用"任务计划"设置功能结合 shutdown命令灵活设置任务计划,让Win ...

  2. SQL server 定时自动执行SQL存储过程

    当一个存储过程是为了生成报表,并且是周期性的,则不需要人工干预,由SQL作业定时自动执行些SQL存储过程即可. 本示例,假设已需要定时执行的存储过程为:Pr_test 工具/原料 SQL Server ...

  3. Linux中main是如何执行的

    Linux中main是如何执行的 这是一个看似简单的问题,但是要从Linux底层一点点研究问题比较多.找到了一遍研究这个问题的文章,但可能比较老了,还是在x86机器上进行的测试. 原文链接 开始 问题 ...

  4. [转载] 在Linux中,开机自动运行普通用户的脚本程序

    FROM:http://blog.csdn.net/sinboy/article/details/2466225 FROM:http://www.2cto.com/os/201006/50680.ht ...

  5. linux中怎样关闭ICMP回应功能

    引用自:http://blog.csdn.net/qq844352155/article/details/49700121 linux中怎样关闭ICMP回应功能   输入:   echo 1 > ...

  6. 【linux】【网络安全】linux中怎样关闭ICMP回应功能

    引用自:http://blog.csdn.net/qq844352155/article/details/49700121       linux中怎样关闭ICMP回应功能   输入:   echo ...

  7. xcode6 beta 中智能提示(自动完成)功能有时不显示的问题

    xcode6 beta 中智能提示(自动完成)功能有时不显示的问题      周银辉 xcode6 beta 中智能提示(自动完成)功能有时不显示,这让人很郁闷啊,网上老外的视频中看人家用的好好的. ...

  8. (转)在网页中JS函数自动执行常用三种方法

    原文:http://blog.sina.com.cn/s/blog_6f6b4c3c0100nxx8.html 在网页中JS函数自动执行常用三种方法 在网页中JS函数自动执行常用三种方法 在HTML中 ...

  9. Markdown 中的目录自动生成功能 TOC

    目录 Markdown 中的目录自动生成功能 TOC 1. 标题一 1.1 标题二 1.标题二 2. 标题一 2.1 标题二 2.2 标题二 Markdown 中的目录自动生成功能 TOC 1. 标题 ...

随机推荐

  1. go语言实现分布式锁

    本文:https://chai2010.cn/advanced-go-programming-book/ch6-cloud/ch6-02-lock.html 分布式锁 在单机程序并发或并行修改全局变量 ...

  2. 设置redis开机自动启动

    注意:win7执行命令前面可不需要加路径,win10必须要加路径 命令: redis-server --service-install redis.windows.conf 执行完成之后,打开服务管理 ...

  3. 逗号分隔的字符串转成表格参与IN条件查询

    返回值为'1,2,3,4,5,6,7',是一个字符串,如果要用IN 查询的话sql认为这是一个完整的字符串,需要将内容分隔转换变成table 定义函数如下: create Function sysfS ...

  4. 【转】三个重复的ACK意味着发生拥塞?

    三次重复的ACK,可能是丢包引起的,丢包可能是网络拥塞造成的,也可能是信号失真造成的. 三次重复的ACK,也有可能是乱序引起的,而乱序和网络拥塞没有直接关系. 如果就写这两行,感觉什么都没写,接下来的 ...

  5. Metasploit3

    1.之前使用的版本是Metasploit2的版本操作系统是基于Ubuntu的,渗透测测试模块也是基于metasploit的,基本上没有设置,Metasploitable3添加了很多安全机制 ,防火墙和 ...

  6. [dev][nginx] 在阅读nginx代码之前都需要准备什么

    前言 以前,我读过nginx的源码,甚至还改过.但是,现在回想起来几乎回想不起任何东西, 只记得到处都是回调和异步,我的vim+ctags索引起来十分吃力. 几乎没有任何收获,都是因为当时打开代码就看 ...

  7. XSLT知识点【一】

    XSL 指扩展样式表语言(EXtensible Stylesheet Language). 它起始于 XSL,结束于 XSLT.XPath 以及 XSL-FO. 起始于 XSL------CSS = ...

  8. 使用BERT模型生成句子序列向量

    之前我写过一篇文章,利用bert来生成token级向量(对于中文语料来说就是字级别向量),参考我的文章:<使用BERT模型生成token级向量>.但是这样做有一个致命的缺点就是字符序列长度 ...

  9. linux系统编程之信号(六)

    今天继续学习信号相关的知识,主要还是学习sigqueue另外信号发送函数,并配合上节学习的sigaction的用法,进入正题: sigqueue函数: sigval联合体: 实际上sigval参数是用 ...

  10. vuex传值的使用

    1.导入vuex import Vuex from 'vuex' Vue.use(Vuex); 2.创建store实例 let store = new Vuex.Store({ state:{ cou ...