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. Linux下用的脚本

    http://blog.itpub.net/29510932/viewspace-1166603/ 批量启动Tomcat 点击(此处)折叠或打开 #!/bin/bash #JDK路径 export J ...

  2. sql语句,数据库中,同表添加,主键不同,数据相同。

    insert into tablename(各个字段名) select #新主键值,其他字段名 from tablename where No = #表中主键值

  3. [堆栈]Linux 中的各种栈:进程栈 线程栈 内核栈 中断栈

    转自:https://blog.csdn.net/yangkuanqaz85988/article/details/52403726 问题1:不同线程/进程拥有着不同的栈,那系统所有的中断用的是同一个 ...

  4. 关于C++模板不能分离编译的问题思考

    C++模板不支持分离编译的思考 前言 在我初入程序员这行时,因为学生阶段只写一些简单的考试题,所以经常是将声明和实现统一写到一个文件中,导致同事在用我的代码时一脸懵逼,因此还有一段悲惨的往事. 为什么 ...

  5. AOP与Filter拦截请求打印日志实用例子

    相信各位同道在写代码的时候,肯定会写一些日志打印,因为这对往后的运维而言,至关重要的. 那么我们请求一个restfull接口的时候,哪些信息是应该被日志记录的呢? 以下做了一个基本的简单例子,这里只是 ...

  6. Handling skewed data---Error metrics for skewed(偏斜的) classes(precision&recall)

    skewed classes skewed classes: 一种类里面的数量远远高于(或低于)另一个类,即两个极端的情况. 预测cancer的分类模型,如果在test set上只有1%的分类误差的话 ...

  7. 移动端开发-viewport与媒体查询

    首先要知道,在移动开发中,手机的浏览器会默认网页是为宽屏而设计的,它会缩小整个页面来适应屏幕. 1. 不使用viewport出现的问题 提到响应式设计,大家首先想到的可能是 Bootstrap , @ ...

  8. C++template基础

    函数模板 类模板 参数魔法 模板与友元

  9. ldap系列-基础知识

    来源:关键字排名 ldap 是什么? LDAP(Lightweight Directory Access Protocol)即轻量级目录访问协议,提供信息服务.那啥是目录服务呢? 目录服务是一种特殊的 ...

  10. softmax 函数的理解和优点

    我们知道max,假如说我有两个数,a和b,并且a>b,如果取max,那么就直接取a,没有第二种可能.但有的时候我不想这样,因为这样会造成分值小的那个饥饿.所以我希望分值大的那一项经常取到,分值小 ...