无法从 cron 执行中获得噩梦的结果
Not able to get result of Nightmare from cron execution
我一直在使用 Nightmare 和 cron 进行一些自动化处理。在 Nightmare 运行s 之后,它获取结果的值并将其附加到我本地计算机中的一个文件中(未检测到网络问题)。
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 nightmareForm.js /var/log/syslog -C 10
我可以看到它已被执行:
Apr 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() 块
Update2:我试图从 crontab 中获取日志,但它没有显示任何错误:0 13 * * * /usr/local/bin/node /home/user/Documents/nightmareForm.js >> /home/user/Documents/nightmareForm.log 2>&1
知道为什么 crontab 中的脚本无法到达 then() 或 catch() 块吗?
谢谢
我遇到了同样的问题。
我的工作是使用 xvfb-运行 启动节点进程。
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-运行 调用直接放入 crontab,但我认为这可能是脚本不允许启动的问题X process(window) 或类似的东西。也许值得尝试将其直接放入 cron 命令中。
这是引导我找到此解决方案的页面:
https://www.nickhart.co.uk/2019/08/09/scraping-with-nightmarejs-getting-started/#run_on_server
我一直在使用 Nightmare 和 cron 进行一些自动化处理。在 Nightmare 运行s 之后,它获取结果的值并将其附加到我本地计算机中的一个文件中(未检测到网络问题)。
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 nightmareForm.js /var/log/syslog -C 10
我可以看到它已被执行:
Apr 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() 块
Update2:我试图从 crontab 中获取日志,但它没有显示任何错误:0 13 * * * /usr/local/bin/node /home/user/Documents/nightmareForm.js >> /home/user/Documents/nightmareForm.log 2>&1
知道为什么 crontab 中的脚本无法到达 then() 或 catch() 块吗? 谢谢
我遇到了同样的问题。
我的工作是使用 xvfb-运行 启动节点进程。
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-运行 调用直接放入 crontab,但我认为这可能是脚本不允许启动的问题X process(window) 或类似的东西。也许值得尝试将其直接放入 cron 命令中。
这是引导我找到此解决方案的页面:
https://www.nickhart.co.uk/2019/08/09/scraping-with-nightmarejs-getting-started/#run_on_server