##Crontab
###介绍:
crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语 chronos(χρόνος),原意是时间。
通常,crontab储存的指令被守护进程激活, crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。
我们Rails里面一个gem whenever用的就是crontab功能
###How to
crontab文件包含送交cron守护进程的一系列作业和指令。每个用户可以拥有自己的crontab文件;同时,操作系统保存一个针对整个系统的crontab文件,该文件通常存放于/etc或者/etc之下的子目录中,而这个文件只能由系统管理员来修改。
例如ubuntu /etc/crontab就是对于整个系统crobtab文件
View Crontab help:
1
crontab -h
Edit Your Crontab:
1
crontab -e
View Users Cronjob:
1
crontab -u userName -l
View Root User Cronjob:
1
crontab -l
View /etc/crontab:
A cronjob can be also run from /etc/crontab file. To view it, enter:
1
less /etc/crontab
View Daily Cronjob:
Type the following commands:
1
2
3
cd /etc/cron.daily/
ls -l
cat filename
View Hourly Cronjobs:
Type the following commands:
1
2
3
4
cd /etc/cron.hourly/
ls -l
cat filename
View Weekly Cronjobs
View Weekly Cronjobs:
Type the following commands:
1
2
3
4
cd /etc/cron.weekly/
ls -l
cat filename
View Monthly Cronjobs
View Monthly Cronjobs:
Type the following commands:
1
2
3
cd /etc/cron.monthly/
ls -l
cat filename
View Software (Package) Specific Cronjobs:
Type the following commands:
1
2
3
cd /etc/cron.d/
ls -l
cat filename
###操作符号
在一个区域里填写多个数值的方法
1
2
3
4
5
- 逗号,分开的值,例如 1,3,4,7,8
- 连词符-制定值的范围,例如 1-6,意思等同于1,2,3,4,5,6
- 星号*代表任何可能的值。例如,在“小时域” 里的星号等于是“每一个小时”,等等
某些cron程序的扩展版本也支持斜线 ('/') 操作符,用于表示跳过某些给定的数。例如,“*/3”在小时域中等于“0,3,6,9,12,15,18,21”等被3整除的数;
###时间设置
1
2
3
4
5
6
7
8
# 文件格式说明
# ——分钟 (0 - 59)
# | ——小时 (0 - 23)
# | | ——日 (1 - 31)
# | | | ——月 (1 - 12)
# | | | | ——星期 (0 - 7)(星期日=0或7)
# | | | | |
# * * * * * 被执行的命令
注: 在“星期域”(第五个域),0和7都被视为星期日。 不很直观的用法:如果日期和星期同时被设定,那么其中的一个条件被满足时,指令便会被执行。请参考下例。 前5个域称之分时日月周,可方便个人记忆。 从第六个域起,指明要执行的命令。
###Example
1
2
3
4
5
6
7
8
9
10
11
#===========================================================
# SYSTEM ACTIVITY REPORTS
# 8am-5pm activity reports every 20 mins during weekdays.
# activity reports every hour on Saturday and Sunday.
# 6pm-7am activity reports every hour during weekdays.
# summary prepared at 18:05 every weekday.
#===========================================================
0,20,40 8-17 * * 1-5 /usr/lib/sa/sa1 1200 3 &
0 * * * 0,6 /usr/lib/sa/sa1 &
0 18-7 * * 1-5 /usr/lib/sa/sa1 &
5 18 * * 1-5 /usr/lib/sa/sa2 -s 8:00 -e 18:01 -i 3600 -ubcwyaqvm &
###实际使用
上面介绍完crontab一些知识以及怎样使用,接下去就来一个比较具体例子,在我们的app里面,当然会涉及到数据库备份,而且往往是放在凌晨来备份,好吧,那我们就定在凌晨一点整时间来备份数据库
首先,我们写一个数据库导出的bash脚本:
1
2
touch backup_mysql.sh
vim backup_mysql.sh
在backup_mysql.sh里面填入以下内容:
1
2
3
4
#!/bin/bash
backup="/#{path}/dump_`date +%d-%m-%Y`.sql"
/usr/bin/mysqldump -u#{user} -p#{user_password} databse_name | gzip > $backup.gz
接下去,我们就可以使用crontab job来帮我们定时1点执行:
注意!backup_mysql.sh必须是要有可执行权限哦
打开crontab编辑:
1
crontab -e
然后选择你需要编辑模式,定时执行backup_mysql.sh:
1
0 1 * * * /bin/bash -l -c 'bash /#{path}/backup_mysql.sh'
好了,接下去你就可以1点整时看看是否有备份;当然其他命令都是这样来使用crontab。如果觉得自己手动写crontab太过麻烦,觉得时间那些都比较难写,用Rails的童鞋们,建议使用下面这个gem whenever
https://github.com/javan/whenever