我的应用程序会定期生成卡斯珀刮刀:
spawn(CASPER_PATH,
[SCRIPTS_PATH + fileName, '--ssl-protocol=any', '--user='+user, '--scrapeId='+scrapeId, '--pass='+pass],
{ detached: true },
function (err, stdout, stderr) {});
需要运行的命令spawn()
如下所示:
/usr/local/bin/casperjs /home/custom_user/casper-scripts/script.coffee --ssl-protocol=any --user=username123 --pass=pass123 --scrapeId=some_id_123
我正在尝试使用永远自动启动节点服务器,并在我需要抓取时 ping 它。
node server.js
当我以我创建的登录用户或 root 用户身份运行它时,效果很好。forever start server.js
当我以 root 用户身份运行时,效果也很好 - 否则,spawn()
什么也不做。
我尝试过forever start
为 root 和普通用户添加 crontab(当然是绝对路径和相对路径)。在这两种情况下,服务器都在指定端口上运行、记录、接受请求,但不会生成 casperjs。
我甚至尝试添加forever start server.js
-/etc/rc.local
仍然没有。服务器正在运行,记录,功能正常,但唯一的方法forever
是能够运行生成()如果我以 root 用户身份登录时明确运行它。
绳子到此结束……
如何在启动时永久授予生成 casperjs 二进制文件的权限?我是否需要以某种方式更改 sudoers 文件?文件夹chown
由非 root 用户创建是否相关?
编辑:
我不知道为什么我没有想到要检查 spawn 报告了什么所以我通过非 root 用户的 crontab 开始并在之后添加以下内容var sP = spawn()
:
sP.stdout.on('data', function(data) { console.log('stdout', data.toString('utf8')); });
sP.stderr.on('data', function(data) { console.log('stderr', data.toString('utf8')); });
sP.stdout.on('close', function(code) { console.log('close', code); });
输出:
stdout Fatal: [Errno 2] 没有这样的文件或目录;您是否安装了 phantomjs?
关闭 假
CasperJS 是 PhantomJS 的包装器。这很奇怪,因为我在系统上安装了这两个:
casperjs --version
1.1.0-beta3
phantomjs --version
1.9.8
看来 crontab 不知道 phantomjs 在 /usr/local/bin 中的存在?
编辑2:
Crontab 现在看起来像这样:
@reboot PHANTOMJS_EXECUTABLE=/usr/local/share/phantomjs-1.9.8-linux-x86_64/bin/phantomjs NODE_ENV=production /usr/bin/forever 启动/home/custom_user/endpoints-server-linux/server.js
phantomjs 错误已消失,但 casper 实际上并未运行。
答案1
你可以尝试给出完整路径永远当您为 rc.local 启动它时。可能是因为您登录时 $PATH 未设置。
除此之外,是否有一些日志永远生成什么?您能否在运行命令的地方输出结果,例如:
/usr/local/bin/forever start <full path to>/server.js | tee /tmp/forever-start.log