javascript - 无法从 cron 执行中获取 Nightmare 结果

标签 javascript node.js cron fs nightmare

我一直在使用 Nightmare 和 cron 开发一些自动化流程。 Nightmare 运行后,它会获取结果的值并将其附加到我本地计算机中的文件中(未检测到网络问题)。

var Nightmare = require('nightmare');
var fs = require('fs');
var filePath = `${process.env['HOME']}/Documents/ResultCron.txt`;

Nightmare()
    .goto('http://mywebsite.com/form')
    .type('input[id="email"]', 'XXX@gmail.com')
    .click('#submit-button')
    .wait('.formSubmitted')
    .evaluate(() => document.querySelector('.formSubmitted').value)
    .end()
    .then(result => {
      console.log(`The form submitted is:\n${result}`)
      fs.appendFileSync(filePath, `\n${result}: ${new Date()}`);
    })
    .catch(error => {
      console.error(error)
      fs.appendFileSync(filePath, `\nERROR: ${error}: ${new Date()}`);
    })

当我使用 node/home/user/Documents/nightmareForm.js 运行它时,它工作正常并写入文件。但是,当从 cron 执行时,它不会将任何内容附加到文件中。

我已将配置添加到 crontab,如下所示:

crontab -e

# It will be executed everyday at 13:00
0 13 * * * node /home/user/Documents/nightmareForm.js

如果我执行 grep nightForm.js/var/log/syslog -C 10 我可以看到它已被执行: 4 月 24 日 13:00:00 PC CRON[1223]:(root)CMD( Node /home/user/Documents/nightmareForm.js)

继续调查,该文件具有以下权限(Ubuntu 18.10):-rwxr-xr-x,因此它应该是可执行的,并且创建的文件具有以下权限:-rw-rw-rw-

更新:根据@ponury-kostek的想法,我验证了脚本可以写入文件,但它永远不会到达then()或catch() block

Update2:我尝试从 crontab 捕获日志,但它没有显示任何错误: 0 13 * * */usr/local/bin/node/home/user/Documents/nightmareForm.js >>/home/user/Documents/nightmareForm.log 2>&1

有什么想法为什么从 crontab 脚本无法到达 then() 或 catch() block 吗? 谢谢

最佳答案

我也遇到了同样的问题。

我的工作是使用xvfb-run来启动 Node 进程。

xvfb-run node myscript.js

实际上我制作的 shellscript (go.sh) 只包含 3 行:

#!/bin/bash
cd /home/me/nodestuff/spkfetch
xvfb-run node fetch_umsaetze.js

并将其添加到 crontab 中:

* * * * *  cd /home/norbert/nodestuff/spkfetch && sh go.sh  >> /home/norbert/nodestuff/spkfetch/log/log.txt  2>&1

我从未尝试将xvfb-run调用直接放入crontab中,但我认为这可能是不允许脚本启动X进程(窗口)或类似问题的问题。也许值得尝试将其直接放入 cron 命令中。

这是引导我找到此解决方案的页面:
https://www.nickhart.co.uk/2019/08/09/scraping-with-nightmarejs-getting-started/#run_on_server

关于javascript - 无法从 cron 执行中获取 Nightmare 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55829077/

相关文章:

javascript - 如何使用 JavaScript 检索并显示 Facebook 上的照片?

angularjs - 如何在一个 app.get 请求中返回多个 Mongodb 集合?

node.js - 如何在 Sequelize CLI 中添加、删除新列

PHP Mysql - 在一段时间内收集数据和更新数据库的最有效方法?

php - 如何在 PHP 中为 future 的发布日期安排/排队内容?

javascript - YouTube将http重定向到https并使用Flash Player代替HTML5

javascript - 使用 SweetCaptcha 的 POST 直接寻址 API

django - Cronjob 无法在 webfaction 上工作

javascript - 使用 Nuxt/Vue.js 划桨

javascript - 如何通过循环将属性推送到数组内对象内的数组?