shell脚本
理解
shell是操作系统的用户界面,提供了用户与内核进行交互操作的一种接口。实际上可以看作是一种命令解释器,把shell编程语言变成linux内核可以执行的内容。
-
shell也分很多版本
Bourne Shell:是贝尔实验室开发的
BASH:是GNU的Bourne Again Shell,是GNU操作系统上默认的shell。
Korn Shell:是对Bourne SHell的发展,在大部分内容上与Bourne Shell兼容。GNU操作系统是一个内Unix 的操作系统。我们常说的linux操作系统其实是一个有linux系统内核+其他自由软件集成起来的。其中的自由软件就包括GNU操作系统,约占源代码的28%,linux内核的源代码占3%。所以Linux操作系统这个说法是不准确的,叫 GNU/Linux操作系统还差不多
我们常用和常见的shell版本是 BASH,是Bourne Shell改编版。
-
shell编程语言
-
shell脚本
1. 一种包含系统命令和shell语言的文件。可以被shell编译执行。
2. 脚本的名称一般是以.shell结尾的,不是也可以(只是为了高确认度)
3. shell有很多种执行器,/bin/bash是一种(用c语言编写的执行器) /bin/sh也是一中执行器
4. 脚本的开头:#!/bin/bash 指定执行器
5. bash 或者 sh 脚本位置 是调用执行器参数的方法执行脚本。这个可以在脚本中不用#!/bin/bash
6. bash或者sh或者echo,ls都是二进制执行文件,是有c或者其他语言编写的命令(一种可执行软件),可以直接在命令行执行是因为在PATH中指定了他们的位置,执行器回去指定目录下找。
crontab(定时器)服务
软件提供的就是服务。
1. 安装
linux应该都有crontab,没有的话可以安装一下:
yum install vixie-cron
yum install crontabs
vixie-cron软件包是cron的主程序;
crontabs软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。
安装完以后开启crontab服务
service crond start
2.命令
用以下的方法启动、关闭这个cron服务:
service crond start
//启动服务
service crond stop
//关闭服务
service crond restart
//重启服务
service crond reload
//重新载入配置
查看crontab服务状态:service crond status
手动启动crontab服务:service crond start
查看调度任务
crontab -l
//列出当前用户的所有调度任务 ,不用-u指定用户都指的是当前用户
crontab -l -u root
//列出用户root的所有调度任务,
crontab -r
//删除所有用户的定时任务,每一个用户只有一个定时文件。
crontab -e
//编写当前用户的定时任务,每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件,此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用crontab -e 来编辑。cron启动后每过一份钟读一次这个文件,检查是否要执行里面的命令。因此此文件修改后不需要重新启动cron服务。c’ron
3. 编写定时任务
- 编写系统定时任务,
vim /ect/crontab
crontab -e
编写当前用户的定时任务- 系统定时任务格式
前四行是有关设置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 - 需要执行的命令(可用 ls /proc >> /tmp/proc或 执行自定义脚本的命令)
root表示以root用户身份来运行,(如果是crontab -e 编写任务时就不用指定用户名了)
run-parts表示后面跟着的是一个文件夹,要执行的是该文件夹下的所有脚本
01 * * * * root run-parts /etc/cron.hourly //每小时执行/etc/cron.hourly内的脚本
02 4 * * * root run-parts /etc/cron.daily //每天执行/etc/cron.daily内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly //每星期执行/etc/cron.weekly内的脚本
42 4 1 * * root run-parts /etc/cron.monthly //每月去执行/etc/cron.monthly内的脚本
这些/etc/crontab,/etc/cron.hourly, /etc/cron.daily,/etc/cron.weekly /etc/cron.monthly都是存在的
run-parts这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是目录名了
* * * * * 是靠空格分隔的
对于以上各语句,星号(*)表示所有可用的值。例如*在指代month时表示每月执行(需要符合其他限制条件)该命令。
整数间的连字号(-)表示整数列,例如1-4意思是整数1,2,3,4
指定数值由逗号分开。如:3,4,6,8表示这四个指定整数。
符号“/”指定步进设置。“/”表示步进值。如0-59/2定义每两分钟执行一次。步进值也可用星号表示。如*/3用来运行每三个月份运行指定任务。
4创建一个文件提交用户定时任务
在考虑向cron进程提交一个crontab文件之前,首先要做的一件事情就是设置环境变量EDITOR。cron进程根据它来确定使用哪个编辑器编辑crontab文件。9 9 %的UNIX和LINUX用户都使用vi,如果你也是这样,那么你就编辑$ HOME目录下的. profile文件,在其中加入这样一行:
EDITOR=vi; export EDITOR
然后保存并退出。不妨创建一个名为 cron的文件,其中是用户名,例如, rootcron。在该文件中加入如下的内容。
# (put your own initials here)echo the date to the console every
# 15minutes between 6pm and 6am
0,15,30,45 18-06 * * * /bin/echo 'date' > /dev/console
保存并退出。确信前面5个域用空格分隔。
在上面的例子中,系统将每隔1 5分钟向控制台输出一次当前时间。如果系统崩溃或挂起,从最后所显示的时间就可以一眼看出系统是什么时间停止工作的。在有些系统中,用tty1来表示控制台,可以根据实际情况对上面的例子进行相应的修改。为了提交你刚刚创建的crontab文件,可以把这个新创建的文件作为cron命令的参数:
$ crontab rootcron
现在该文件已经提交给cron进程,它将每隔1 5分钟运行一次。
同时,新创建文件的一个副本已经被放在/var/spool/cron目录中,文件名就是用户名(即root)。
5crontab -e 提交用户定时任务
格式跟上面的系统定时任务大致一样。
* * * * * commd
*/1 * * * * /bin/sh /home/zi.sh 不需要指定用户