执行PhantomJS定时任务(Cron Job)时遇到问题求助
解决Cron执行PhantomJS远程脚本的问题
你现在遇到的问题是因为Cron本身不知道怎么直接处理URL,而且wget只是下载文件不会执行脚本,得搭配PhantomJS的执行命令才行,我给你捋清楚怎么弄:
为什么之前的配置没用?
- 直接写
* * * * * http://example.com/file.js:Cron会把这个URL当成要执行的命令,但系统里根本没有叫这个的可执行程序,肯定跑不起来。 - 用
wget http://example.com/file.js:这只是把JS文件下载到当前目录,没有触发PhantomJS去解析执行里面的代码,相当于只存了个文件而已。
正确的Cron配置方案
首先要确认你服务器上已经装了PhantomJS,并且知道它的绝对路径(可以用 which phantomjs 命令查看,比如常见的路径是 /usr/local/bin/phantomjs)。
方案1:下载脚本到本地再执行
适合需要保留脚本或者对网络稳定性没把握的情况,Cron命令如下:
* * * * * wget -q -O /tmp/phantom_script.js http://example.com/file.js && /usr/local/bin/phantomjs /tmp/phantom_script.js && rm /tmp/phantom_script.js
-q:让wget安静运行,不输出多余信息-O /tmp/phantom_script.js:把下载的文件指定保存到临时目录&&:只有前面的命令成功执行,才会跑后面的PhantomJS执行命令- 最后
rm是删除临时文件,避免占空间
方案2:直接通过管道执行(无需保存文件)
更简洁,直接把远程脚本内容传给PhantomJS执行:
* * * * * curl -s http://example.com/file.js | /usr/local/bin/phantomjs -
-s:让curl安静运行|:把curl获取到的脚本内容通过管道传给PhantomJS- 最后的
-:告诉PhantomJS从标准输入读取要执行的脚本
关键注意事项
- 一定要用PhantomJS的绝对路径:Cron的环境变量和你平时登录服务器的环境不一样,只用
phantomjs可能会提示找不到命令,所以必须写全路径。 - 添加日志排查问题:可以把Cron的输出重定向到日志文件,方便看哪里出错了,比如在命令末尾加:
>> /var/log/phantomjs_cron.log 2>&1,这样所有输出(包括错误)都会写到日志里。 - 确保远程脚本可访问:检查
http://example.com/file.js是否能正常打开,没有权限限制或者404的情况。
内容的提问来源于stack exchange,提问作者ShittyDeveloper
相关产品推荐
相关产品推荐

