在linux系统中,如 freebsd,cron 排程的资料是存在/etc/crontab中,我们可以直接输入 vi /etc/crontab进行编辑。
Linux Cron 指令
- crontab -e 编辑排程 (edit cron)
- crontab -r 移除排程 (remove cron)
- crontab -l 显示目前排程 (list cron)
- crontab -u 改变排程的执行身分: crontab -u user filename
Cron 语法介绍
分钟 |
小时 |
日 |
月 |
星期 |
执行身份 |
指令 |
---|---|---|---|---|---|---|
0~59 |
0~23 |
1~31 (29,30) |
1~12 |
0~6 0是星期日,6是星期六 |
帐号 |
/usr/bin/xxxx |
Cron 范例 ( Example )
每5分钟执行一次
*/5 * * * * root /usr/libexec/atrun
每5小时执行一次
* */5 * * * root /usr/libexec/atrun
1至20号每天执行一次
0 1 1-20 * * root /usr/libexec/atrun
当分针移到第5分时,执行此 cron
5 * * * * root /usr/libexec/atrun
当时针移到1点 1 分时,执行此 cron
1 1 * * * root /usr/libexec/atrun
每周一的1点1分,执行
1 1 * * 1 root /usr/libexec/atrun
2月29日时针到1点1分,执行
1 1 29 2 * root /usr/libexec/atrun
8点到16点每5分钟执行一次 cron
*/5 8-16 * * * root /usr/libexec/atrun
start cron
在 Linux 中,有个程式叫 crond ,意思是 cron daemon,大部分的 Linux 系统都会自动背景启开这个程式,但是有时候会碰到 cron 没有启动的状态,启动方式如下:
! sudo service crond start启动之后,我会使用 tail -f /var/log/cron
这个指令来检查 /etc/crontab 中的程式,是否有正确的被执行。
如何让 cron job 自动 SCP 备份资料
首先我们要启用 SSH Agent,有了 SSH Agent ,就能够执行 scp 指令,并且自动通过输入密码的过程。
先在个人目录下新增 .bash_profile ,并加入以下的内容,加入完成后得重新载入 .bash_profile , 使用指令「source ~/.bash_profile」,之后我们就可以用 start_agent 启动 SSH Agent。
- SSH_ENV=$HOME/.ssh/environment
- function start_agent {
- echo "Initialising new SSH agent..."
- /usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}
- echo succeeded
- chmod 600 ${SSH_ENV}
- . ${SSH_ENV} > /dev/null
- ssh-add id_rsa
- }
接下来修改 /etc/crontab ,将备份的指令输入就可以了,如果想看执行的 Log ,可以在指令的最后补上 「 2>&1 &> ~/cronLog」,这样程式就会将结果存到 ~/cronLog。
- 1 1 * * * userxx . /home/userxx/.ssh/environment && /usr/bin/scp puritys.me:~/var/backup/* ~/
这个范例是每天自动备份另一台机器的资料,但是时间一久 ,备份的资料会越来越多,最后硬碟会撑不住,所以又要加一个自动删除旧档的 cron job,下面这个范例会自动删除五天前的 gz 备份档。
- 40 1 * * * userxx /usr/bin/rm `date --date="-5 day" +\%Y-\%m-\%d`*.gz
日期运算另一种写法 date -d "-1 day" +"%Y-%m-%d"
sleep 一段时间
Cronjob 最短只能设定到每分钟执行,如果你想要设定就某几秒可以执行,那么可以用 perl sleep 来达成。
40 1 * * * userxx perl -e 'sleep(int(rand(60 * 60 * 24)));' && run xx
回應 (Leave a comment)