Linux 计划任务 Crontab
基本格式:
* * * * * command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
crontab文件的一些例子:
30 21 * * * /opt/lampp/lampp restart
#上面的例子表示每晚的21:30重启lampp。
45 4 1,10,22 * * /opt/lampp/lampp restart
#上面的例子表示每月1、10、22日的4 : 45重启lampp。
10 1 * * 6,0 /opt/lampp/lampp restart
#上面的例子表示每周六、周日的1 : 10重启lampp。
0,30 18-23 * * * /opt/lampp/lampp restart
#上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启lampp。
0 23 * * 6 /opt/lampp/lampp restart
#上面的例子表示每星期六的11 : 00 pm重启lampp。
* */1 * * * /opt/lampp/lampp restart
#每一小时重启lampp
* 23-7/1 * * * /opt/lampp/lampp restart
#晚上11点到早上7点之间,每隔一小时重启lampp
0 11 4 * mon-wed /opt/lampp/lampp restart
#每月的4号与每周一到周三的11点重启lampp
0 4 1 jan * /opt/lampp/lampp restart
#一月一号的4点重启lampp
crontab 命令参数:
crontab -e : 新增/修改时程表
crontab -r : 删除目前的时程表
crontab -l : 列出目前的时程表
crontab file [-u user]-用指定的文件替代目前的crontab。
实例1:Linux下SVN客户端版本库定时更新
现有两台机器
一台 windows : 192.168.1.125
一台 linux : 192.168.1.132 (Ubuntu 10.04 LTS / root)
windows 上运行有 SVN-Server (svn://192.168.1.125)
Linux 上安装有 SVN-Client , 现在想定时(每一小时)更新一次 Linux 上的版本库.
1, 先将 SVN-Server 上的版本库检出到 Linux 机器的指定目录 (/root/backup/winsvn/)
cd /root/
mkdir backup
cd backup/
mkdir winsvn
cd winsvn/
/usr/bin/svn checkout svn://192.168.1.125
2, 设置 crontab
crontab -e
#将 crontab 中的内容修改如下
#第一条是定时同步时钟的,
#第二条才是我们要的, 表示每小时的第50分钟执行一次 SVN 更新命令
# 注意:
# LANG=en_HK.UTF-8 <-- 这一句话很重要,要将crontab的编码设置成系统环境编码,
# 否则会造成手动执行 update 命令成功,但放到 crontab 中更新不成功
LANG=en_HK.UTF-8
# m h dom mon dow command
19 * * * * /usr/sbin/ntpdate ntp.api.bz
50 * * * * /usr/bin/svn update /root/backup/winsvn --username kuco --password kucopwd --no-auth-cache > /root/backup/winsvn_backup.log
P.S. 特别注意 LANG=en_HK.UTF-8 很重要, 在这个问题郁闷了很久. 可以通过 export 命令显示系统环境编码.
还有几点零星的知识点也一并记录在这里吧
1, SVN客户端检出的时候把用户名和密码都保存了,如果想再切换成其它的用户来检出该怎么操作?
# windows 下
方法1:对于TortoiseSVN软件,右键出TortoiseSVN菜单Settings->Saved Data->Authentication data,Clear
方法2:C:\Documents and Settings\Administrator\Application Data\Subversion\auth
# linux 下
rm -rf ~/.subversion/auth
# 原文地址
# http://blog.chinaunix.net/space.php?uid=20564848&do=blog&cuid=2200464
2, find 命令
# 在当前目录下查找文件名为 rsyslog.conf 的文件
find . -name "rsyslog.conf"
# find 命令详细介绍
# http://www.linuxsir.org/main/?q=node/137
3, 打开 crontab 日志功能
# 默认情况下 ubuntu 执行 crontab 是没有记录日志的, 我们要手动打开
vim /etc/rsyslog.conf
# 发现 rsyslog.conf 调用了 /etc/rsyslog.d/*.conf
ls /etc/rsyslog.d/*.conf
# 先备份
cp /etc/rsyslog.d/50-default.conf /etc/rsyslog.d/50-default.conf.bak
# 再编辑
vim /etc/rsyslog.d/50-default.conf
# 将下面这一行前面的 # 去掉
#cron.* /var/log/cron.log
# 重启日志服务
cd /etc/init.d/
service rsyslog restart
/var/log/cron.log