CPanel中CRON Job执行curl命令无法下载有效XML内容的问题
解决cron+curl下载XML文件为空的问题
看起来你的问题出在curl命令的语法细节和cron的执行环境上,我帮你一步步排查和修正:
1. 修复curl命令的核心语法错误
你的curl命令有几个明显的问题:
curl-s中间缺少空格,-s是curl的静默模式参数,必须和主命令分开写成curl -s- 重复使用
>>追加到同一个文件,而你需要替换旧文件,应该用>(覆盖模式)而非>>(追加模式) - URL中的
&符号在cron的shell环境中会被解析为后台运行指令,导致请求被截断,要么用单引号包裹整个URL,要么把&转义为\&
修正后的推荐命令(用单引号包裹URL更简洁):
curl -s 'https://www.aviationweather.gov/adds/dataserver_current/httpparam?datasource=metars&requesttype=retrieve&format=xml&hoursBeforeNow=1.25&mostRecentForEachStation=constraint' > /home/myserver/public_html/metarfiles/db/metars.xml
2. 确保cron的执行环境正常
- 指定curl绝对路径:cron的PATH环境变量可能不全,最好用
which curl找到curl的绝对路径(比如/usr/bin/curl),替换命令中的curl - 验证权限:手动执行一次修正后的命令,确认当前用户对目标目录
/home/myserver/public_html/metarfiles/db/有读写权限,避免cron执行时因权限不足生成空文件
添加绝对路径后的命令示例:
/usr/bin/curl -s 'https://www.aviationweather.gov/adds/dataserver_current/httpparam?datasource=metars&requesttype=retrieve&format=xml&hoursBeforeNow=1.25&mostRecentForEachStation=constraint' > /home/myserver/public_html/metarfiles/db/metars.xml
3. 添加日志方便排查(可选)
如果还是出现问题,可以在命令末尾追加错误日志,方便定位问题:
/usr/bin/curl -s 'https://www.aviationweather.gov/adds/dataserver_current/httpparam?datasource=metars&requesttype=retrieve&format=xml&hoursBeforeNow=1.25&mostRecentForEachStation=constraint' > /home/myserver/public_html/metarfiles/db/metars.xml 2>> /home/myserver/public_html/metarfiles/db/cron_download.log
执行后如果出错,错误信息会写入cron_download.log,帮你快速找到原因(比如DNS解析失败、网络超时等)。
4. 设置正确的cron时间规则
你需要每5分钟执行一次,对应的cron时间表达式应为:
*/5 * * * * /usr/bin/curl -s 'https://www.aviationweather.gov/adds/dataserver_current/httpparam?datasource=metars&requesttype=retrieve&format=xml&hoursBeforeNow=1.25&mostRecentForEachStation=constraint' > /home/myserver/public_html/metarfiles/db/metars.xml
按照上面的步骤修正后,应该就能正常下载到包含有效数据的XML文件了。
内容的提问来源于stack exchange,提问作者cavuco
相关产品推荐
相关产品推荐

