linux设置定时任务

时间:2021-06-25 07:46:31

很久没发博客了,说明自己这三四个月确实没怎么积累学习成果了(或者说都是学习比较零散的新知识不足以写成博客)。因为12月份找到了毕业那份工作之后就开始闲下来了,过完年出来正在做一个软件开发的实习(做个搬砖临时工挣个三餐,顺便不想呆在学校宿舍堕落地等待毕业),最近才开始积累些学习成果。最近在做shell脚本的开发,涉及到linux设置定时任务的问题。

1.用crontab/cron命令,可以man一下crontab的用法。

crontab -e : 编辑定时任务,格式如下:

minute hour day-of-month month-of-year day-of-week commands    

使用星号*表示任一时间/所有时间,举例:

*/5 * * * * echo "Hello"

这句定时任务表示每5分钟echo一次"Hello",/5 的作用就表示每5(分钟)。echo输出的内容并不出输出到命令行中,可以将其重定向到文件当中:

echo "Hello" /home/admi/test.log

更多crontab详细写法网搜。


command自然可以是执行一个脚本:

* * * * * /home/admi/test.sh
这句定时任务表示每分钟执行一遍test.sh脚本,更复杂的定时任务就应该以这样形式,先写在脚本上,然后定时去执行这个脚本(注意要提前给它可执行权限)。


2.定时任务之发邮件
可以直接在crontab -e 指定邮件地址,使用 MAILTO关键字修改发邮件地址,如:

MAILTO=hello@email.com

然后每次执行定时任务之后都会将结果发送给该邮件地址。
另一种方法是在shell脚本里面用mail关键字,mail是使用sendmail服务的,貌似要先安装sendmail服务,自行网搜。mail用法如下:
mail -s "This is subject" -c "hello@email.com haha@email.com" hi@email.com < /home/admi/test.log

-s参数后面跟的是邮件的主题;-c参数接的是抄送的地址,如果有多个抄送地址则要用双引号引起来,当然-c这个参数可以不要;往后hi@email.com是主邮件地址;再往后接的是邮件正文,你可以直接随便打一些字符串上去,也可以像上面那样用" < /home/admi/test.log "表示将test.log文件里面的内容当作正文发邮件出去。

更详细用法网搜。


貌似mutt发邮件更强大?今天试了下mail命令-a参数的附件功能,一直卡住发不出去邮件,不知啥原因,用mutt也是-a参数发带附件的邮件一下子就好了,貌似mutt快捷?附一个mutt的使用方法链接: linux shell发送带附件的邮件