转发原文:crontab 定时任务
Shell俗称壳,类似于DOS下的command和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。作为命令语言,它交互式解释和执行用户输入的命令或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。
我的虚拟机是centos7.2.1
接下来 写一个简单的shell命令:
1.创建一个cron目录,把所有的定时任务都统一放在一个目录
cd /mnt
mkdir cron
2.使用vi编辑器 可以直接 # vim hello.sh编写第一个shell文件 hello.sh, 注意一定要以.sh结尾
vim hello.sh
3.编写第一个shell文件,#!/bin/bash 是必须要写的,表示要是/bin/bash这个执行脚本的命令执行接下来写的脚本, echo "hello world !!"表示想前端打印一句话,具体看各自需求。
手动执行一下看是否成功
4.通过chmod命令赋予该脚本的执行权限chmod 755 hello.sh,否则没有执行权限。然后执行命令 crontab -e 直接进入 vi 编辑模式,添加定时任务,下边图片意为:每隔一分钟执行 hello.sh
可以通过 tail -f /var/log/cron 查看log
一个简单的shell脚本写完了 但是运行后只能执行一次,接下来说一下计划任务
linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另 外, 由于使用者自己也可以设置计划任务,所以, Linux 系统也提供了使用者控制计划任务的命令 :crontab 命令。
通常 crontab 都是自带的,如果没有可以 yum 安装
yum install vixie-cron
yum install crontabs
vixie-cron软件包是cron的主程序;
crontabs软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。
安装完以后开启crontab服务
systemctl start crond
service crond start
**
我使用的是CentOS7.2.1 老版本和新版本命令不一样,老版本是:
service crond start
命令错误会报:Redirecting to /bin/systemctl start crond.service
**
用以下的方法启动、关闭这个cron服务:
systemctl start crond //启动服务
systemctl stop crond //关闭服务
systemctl restart crond //重启服务
systemctl reload crond //重新载入配置
查看crontab服务状态:systemctl status crond
手动启动crontab服务:systemctl start crond
查看crontab服务是否已设置为开机启动,执行命令:systemctl is-enabled crond
关闭开机自启动 systemctl disable crond
让服务开机启动 systemctl enable crond.service
设置需要执行的脚本
新增调度任务可用两种方法:
1)、在命令行输入: crontab -e 然后添加相应的任务,wq存盘退出。
2)、直接编辑/etc/crontab 文件,即vi /etc/crontab,添加相应的任务。
crontab -e配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务
查看调度任务
crontab -l //列出当前的所有调度任务
crontab -l -u jp //列出用户jp的所有调度任务
删除任务调度工作
crontab -r //删除所有任务调度工作 (慎用,他会删除所有的计划任务)
直接编辑 vim /etc/crontab ,默认的文件形式如下:
前四行是有关设置cron任务运行的环境变量。
SHELL变量的值指定系统使用的SHELL环境(该样例为bash shell),
PATH变量定义了执行命令的路径。Cron的输出以电子邮件的形式发给MAILTO变量定义的用户名。
如果MAILTO变量定义为空字符串(MAILTO=""),电子邮件不会被发送。执行命令或脚本时HOME变量可用来设置基目录。
文件/etc/crontab中每行任务的描述格式如下:
minute hour day month dayofweek command
minute - 从0到59的整数
hour - 从0到23的整数
day - 从1到31的整数 (必须是指定月份的有效日期)
month - 从1到12的整数 (或如Jan或Feb简写的月份)
dayofweek - 从0到7的整数,0或7用来描述周日 (或用Sun或Mon简写来表示)
command - 需要执行的命令(可用as ls /proc >> /tmp/proc或 执行自定义脚本的命令)
查看所有crontab任务:
以root用户执行,cat /etc/passwd | cut -f 1 -d : |xargs -I {} crontab -l -u {}