今天早上,我在企业群里拉了几个小伙伴,建了个群聊,主要目的是每天中午三次握手确定吃饭的事情。
结果一个小伙伴说,搞个机器人自动提醒吧,好有道理。省得大家工作太认真而忘记吃饭!/狗头
开始
首先,要有个群,然后添加一个机器人,添加完成后,会有一个Webhook的地址
还有一个简单的配置说明,由于我们只是定时提醒个吃饭,功能很简单,就用curl第一个例子即可
我先测试了一下,把curl的地址改为自己机器人的,把hello world例子直接在Linux终端执行,企业微信群就会收到机器人的消息。
不错,下一步,就是把把那几行指令写进sh里
[root@compute eat-alarm]# ll
total 16
-rwxr-xr-x 1 root root 282 Aug 21 21:27 eat-alarm.sh
-rwxr-xr-x 1 root root 19 Aug 21 19:09 hello.sh
这里由于我自己比较傻逼,还耽误了一会儿。因为后面我设置了定时任务后,怎么都没反应,后来发现原因了
因为我的消息内容里有句“Let's go”,shell这玩意儿还需要对单引号转义字符吧,我特么刚开始也没有想到,明明hello world是正常的呀 /狗头
我用的vi,没有高亮,也就没有注意到,只想到是不是哪里多了个空格或是中文字符之类的,怎么都没查出来
气的不行,换成vim,结果刚打开就特么发现那个单引号了,害
好,继续。就是添加定时任务了。用crontab,这个工具不知道是不是Linux自带的,可以先查看一下有没有安装,没有安装的话就先安装一下。比如我查看一下,已经有了
[root@compute eat-alarm]# rpm -qa|grep crontab
crontabs-1.11-6.20121102git.el7.noarch
它的配置文件在这里
[root@compute ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
4 11 * * 1,2,3,4,5 root /root/eat-alarm/hello.sh >> /root/lzb-log
上面最后一行是我添加的,不过我在这里添加好像没起作用,不知道为什么,有可能是因为那个单引号的问题
不在配置文件里设置的话,也可以自己随便创建一个文件,后缀为.cron就行,比如我这样
[root@compute eat-alarm]# ll
total 16
-rwxr-xr-x 1 root root 282 Aug 21 21:27 eat-alarm.sh
-rwxr-xr-x 1 root root 19 Aug 21 19:09 hello.sh
-rw-r--r-- 1 root root 187 Aug 21 21:28 lzb.cron
[root@compute eat-alarm]# cat lzb.cron
29 21 * * 1,2,3,4,5 /root/eat-alarm/eat-alarm.sh
#16 11 * * 1,2,3,4,5 root /root/eat-alarm/hello.sh > /root/lzb-log.txt
创建好cron文件后,执行
[root@compute eat-alarm]# crontab lzb.cron
然后就可以通过crontab -l看到定时任务了
[root@compute eat-alarm]# crontab -l
29 21 * * 1,2,3,4,5 /root/eat-alarm/eat-alarm.sh
#16 11 * * 1,2,3,4,5 root /root/eat-alarm/hello.sh > /root/lzb-log.txt
# 每周1-5,21点29分运行
加入查看定时任务提示no crontab for root,没关系,执行一下crontab -e,然后再-l即可
最终结果