shell脚本学习指南[五](Arnold Robbins & Nelson H.F. Beebe著)

2019-09-23 09:42:00王振洲

15 * * * * command # 每个小时的第15分钟执行
0 2 1 * * command # 每个月一开始的02:00执行
0 8 1 1,7 * command # 每个一月一日与七月一日的08:00执行
0 6 * * 1 command # 每周一06:00执行
0 8-17 * * 0,6 command # 每周末的08:00到17:00间一小时执行一次
在command可以详细指出要执行的文件或重新设定要执行文件的查找路径:
0 4 * * * /usr/local/bin/updatedb
0 4 * * * PATH=/usr/local/bin:$PATH updatedb
任何出现在标准错误输出或标准输出上的数据都会显示给你,或是在其他实例中,将会寄到MAILTO变量的值所指定的用户。实物上通常会比较倾向与将输出重导至一个日志文件,并累积连续执行的记录:
55 23 * * * $HOME/bin/daily >> $HOME/logs/daily.log 2>&1
这样日志文件会过大,一般可以加上日期:
55 23 * * * $HOME/bin/daily > $HOME/logs/daily.`date +%Y.%m.%d`.log 2>&1
这样时间长了文件会过多,你可以轻松删除或压缩这些文件:
find $HOME/logs/*.log -ctime +31 | xargs bzip2 -9 #压缩一个月前的日志文件
find $HOME/logs/*.log -ctime +31 | xargs rm #删除一个月前的日志文件
这里小心crontab -r 将crontab文件整个删除。它就像rm一样无法撤回,也无法复原。建议保留备份:
crontab -l > $HOME/.crontab.`hostname` #存储现行的crontab
恢复的时候:
crontab $HOME/.crontab.`hostname` #回复存储的crontab
就像at命令那样,系统目录里也有cron.allow与cron.deny文件,用以控制是否允许cron工作,以及谁可以执行它们。

最后讲了一下/proc文件系统,大概意思是每个子进程在那里有个目录用进程ID命令。