自己租用了一台阿里云的服务器,然后是按流量收费的,结果发现这天每个小时都有接近600m的公网流量流出,而且每个时段都一致,如果再这样下去,一年得花5k来养活这台机器。。。经过各种排查,发现主要是某个ip流出的流量过多,从阿里云管理控制台禁用该ip后,流量立马下来。 开始怀疑是我服务器被攻击,最后发现其实是我博客链接推动到百度的定时任务写错了,我想的是每天推送一次的,结果每分推送一次。。(话说我一分钟推送一次所有博文链接,百度到现在一篇都不给我收录)。 所以在这里我想介绍下linux定时任务的设置,主要是crontab命令。
crontab算是linux shell里参数较少的几个命令之一了,只有 [ -u user ] [ -i ] { -e | -l | -r },我来分别介绍下这几个参数。
crontab -u user
指定用户为user,如果在使用过程中不加-u user默认就是当前登陆用户。 crontab -e
e是edit,编辑当前用户的定时任务。crontab -l
l是list,列出当前用户所有定时任务。 crontab -r
r是remove,删除当前用户所有定时任务。crontab -i -r
-i其实没多大用,和-r搭配使用,和纯-r不同的是,加了-i 删除前需要你确认一次。 crontab的格式很简单,* * * * * shell; 这几个星号分别代表时间,然后星号后面直接跟你需要定时直接的命令,如果你命令太长,你可以把脚本写到文件里,然后执行这个文件。
我平时的记忆方式为 分 时 日 月 周,这几个字读顺口就很难忘掉了。为了大家更容易理解,我直接来几个例子。
0 0 * * * rm -rf /tmp/*; #每天0点0分删除/tmp/下所有文件
59 12 15 * * reboot; #每月15号12点59分重启系统
*/30 * * * * sh /root/abc.sh; #每隔30分执行下/root/abc.sh文件
0 12 */10 * * uptime >> /root/uptime.txt; #每隔10天的12点,把uptime执行的结果写入/root/uptime.txt
有几点需要注意的。
我们除了直接使crontab命令之外,还可以把定时任务写到/etc/cron.d/下,随便新建个文件,按crontab的语法格式把定时任务写进去就好了,系统就会直接给你按时调度的,但要注意的是,你写进去的任务都是以root用户的权限调度的,如果想以其他用户调取,可以在5个星号后面加用户名,比如0 12 */10 * * ixindoo uptime >> /root/uptime.txt;
以ixindoo执行 uptime这个命令。
暂时就写这么多了,以后想到再补充。。。。