如何在 Ubuntu 上永久自动启动节点并使用 spawn() 作为 sudo?

如何在 Ubuntu 上永久自动启动节点并使用 spawn() 作为 sudo?

我的应用程序会定期生成卡斯珀刮刀:

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

相关内容