crontab命令进行任务调度,自动执行一些脚本,完成特定任务。
如,启动app,日志拷贝等
每个用户都有自己的调度crontab
vi /etc/crontab
crontab的初始内容:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
#run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
* * * * * 用户名 可执行命令
* 分别代表 “分钟(0~59)、小时(0~23)、日期(1~31)、月份(1~12)、星期(0~6)”
例如:
* * * * * #表示每分钟执行1次任务
1 * * * * #表示当每小时的第1分钟时执行1次任务
2 12 * * * #表示每天的12点第2分时执行1次任务(每天12:02)
0-59/2 * * * * #表示每2分钟执行1次任务
实例一
1、在下午4:50删除abc目录下全部子目录和文件
2、从早8:00到下午6:00每小时读取/xyz目录下x1文件中每行第1个域的全部数据到/backup目录下的bak01.txt文件内
3、每个星期一下午5:50将/data目录下所有目录和文件归档压缩为文件backup.tar.gz
4、在下午5:55将IDE接口的CD-ROM卸载(假设CD-ROM的设备名为hdc)
5、在早晨8:00前开机后启动
可以在/etc/crontab文件中加入以下命令:
50 16 * * * rm -rf /abc/*
* 8-18/1 * * * cut -f1 /xyz/x1 >;>; /backup/bak01.txt
50 17 * * * tar czvf backup.tar.gz /data
55 17 * * * unmount /dev/hdc
第5点,需要在8:00前开机,之后Shell自动运行crontab
实例二
系统管理员在每月第1天备份并压缩/var目录的所有内容
存放在/root/bak目录中
且文件名形式为yymmdd_var
其中,yy为年,mm为月,dd为日
因此,可以编写1个脚本完成备份功能,然后在crontab设置每天执行该脚本来达到目的
备份文件的脚本命名为planback.sh
#!/bin/bash
DIRNAME=`ls /root | grep bak` #获取 /root/bak 字符串
if [ -z "$DIRNAME" ]; then #如果 /root/bak 不存在,则创建
mkdir /root/bak
cd /root/bak
fi
#获取年、月、日
YY=`date +%y`
MM=`date +%m`
DD=`date +%d`
BACKVAR=$YY$MM$DD_var.tar.gz #设置备份文件的名称
tar -zcvf $BACKVAR /var #将/var目录进行打包并压缩
echo "/var backup finished!"
然后,在crontab中配置脚本执行时间
0 1 * * * /bin/bash /usr/bin/planback.sh #每天凌晨1点执行planback.sh脚本
========================================================================
当Linux用户登录时,Shell会自动执行.bash_profile文件
而.bash_profile文件会调用.bashrc脚本,因此,在.bashrc中调用我们自己写的脚本即可让某些脚本在用户登录后自动得到执行。如,Shell会自动配置当前用户的PATH环境变量。
但是,要想执行定时任务,还得靠crontab来完成!
.bash_profile
#!/bin/bash
if [ -f ~/.bashrc ]; then
. ~/.bashrc #执行宿主目录下的bashrc脚本
fi
PATH=$PATH:$HOME/bin
export PATH
unset USERNAME
.bashrc
# .bashrc
alias rm="rm -i"
alias cp="cp -i"
alias mv="mv -i"
if [ -f /etc/bashrc ]; then
. /etc/bashrc #执行/etc/bashrc脚本
fi