昨天想给博客加上评论邮件提醒功能,便在网上搜索了一下,决定使用CommentToMail2.0,插件安装好后,测试邮件发送功能正常,但是评论以后并没有发送提醒邮件,于是决定换另一个更改过的版本CommentToMail V4.1,安装插件后需要设置cron定时任务定时访问插件后台的任务执行地址加上自己设置的Key,根据教程我在服务器上安装了crontab,并在配置文件中写了以下脚本:

*/1 * * * * curl https://freedomspread.com/action/comment-to-mail?do=deliverMail&key=faofjkajffafsd

然后开启crond服务开始执行定时任务,但是测试发现并没有正常触发,我仍然没有收到邮件提醒,在经过排查后我发现是curl https://freedomspread.com/action/comment-to-mail?do=deliverMail&key=faofjkajffafsd这条命令出现了问题,访问该网址并没有获得正确的响应,但是在浏览器中访问该网址却正常响应,我想了很久找不到是哪个环节出了问题,甚至还去看了插件源码,虽然没学过php,但是大概逻辑还是能看懂,也没找到什么问题,就这样在这里卡了很久,最后干脆不想了,去睡觉。

在床上躺着的时候突然想到,干嘛不去Google一下万一找到解决办法呢,于是在Google搜索中看到这篇博文CommentToMail-typecho邮件通知评论的插件简单设置方法中提到curl 后面的网址要用""括起来,于是我把脚本改成

*/1 * * * * curl "https://freedomspread.com/action/comment-to-mail?do=deliverMail&key=faofjkajffafsd"

评论邮件提醒终于正常触发,就因为少加了一对""双引号让我浪费了一个小时的时间!

为什么不加双引号curl访问网址没有正确回应呢?因为在网址中有一个&符号,bash中在命令后加&代表后台执行命令,于是curl https://freedomspread.com/action/comment-to-mail?do=deliverMail&key=faofjkajffafsd命令就变为后台执行curl https://freedomspread.com/action/comment-to-mail?do=deliverMail,少了自定义的key参数,便得不到正确响应,也就无法触发邮件发送任务。在curl后面的网址加上""后可以对&进行转义,即可访问正确的网址。

这件事反应出我的两个问题,一是太喜欢钻牛角尖,不会换个角度或方向思考问题;二是对Linux系统的使用还是太粗浅,连&符号的作用都不知道,导致没有分辨出是&符号的造成的问题。