很简单,我有一个节点脚本,我想每个月执行一次。
30 6 1 * * node /home/steve/example/script.js
但是这不起作用,大概是因为路径或shell正在运行命令。我尝试了以下通过cron执行节点的方法(用-v测试):
steve@atom:~$ node -v
v0.4.2
steve@atom:~$ sh node -v
sh: Can't open node
steve@atom:~$ bash node -v
/usr/local/bin/node: /usr/local/bin/node: cannot execute binary file
steve@atom:~$ /usr/local/bin/node -v
v0.4.2
steve@atom:~$ sh /usr/local/bin/node -v
/usr/local/bin/node: 1: Syntax error: "(" unexpected
steve@atom:~$ bash /usr/local/bin/node -v
/usr/local/bin/node: /usr/local/bin/node: cannot execute binary file
我已经没有想法尝试,有什么建议吗?
答案 0 :(得分:87)
只需在您的cron作业中提供节点/usr/local/bin/node
的完整路径,如:
30 6 1 * * /usr/local/bin/node /home/steve/example/script.js
答案 1 :(得分:25)
此外,只需将#!/usr/local/bin/node
放在要执行的脚本的顶部即可。然后它会自动知道用节点执行脚本。确保文件也是可执行的。
答案 2 :(得分:5)
这些答案在这里说使用绝对路径都会对运行较大的节点应用程序造成重大问题!
真正的完整解决方案
编辑Cron作业
crontab -e
查找节点路径
which node
将CD放入目标文件夹,然后根据“节点路径”更改Cron Job并运行脚本
*/2 * * * * cd /home/destination/path && /bin/node index.js
然后,这将允许您运行完整的NodeJS应用程序,而不会出现所有错误,例如如何为index.js文件使用绝对路径。
答案 3 :(得分:4)
我不知道将脚本中的相对路径更改为绝对路径是一个好主意 (当您的文件系统发生变化或在其他环境中部署时会发生什么?)
您可以尝试将其包装在shell脚本中,在crontab执行中设置一些环境变量。 (具体来说,PATH
& NODE_PATH
为初学者)
尝试我对这个类似问题的建议:
https://stackoverflow.com/a/27823675/608269
答案 4 :(得分:3)
在我使用Linux的笔记本电脑中,给定的路径不起作用,所以我用它来解决问题。
$ which node
$ /usr/bin/node
这对我有用。
答案 5 :(得分:0)
使用节点别名的绝对路径和要运行的文件。
编辑Cron职位
crontab -e
输入运行我们的节点文件
这将每分钟运行一次。
*/1 * * * * * /bin/node /public/test.js
完整教程 https://askmacgyver.com/blog/tutorial/how-to-run-node-scripts-from-a-cron-job
答案 6 :(得分:0)
您还可以在用户crontab顶部指定二进制文件的路径,例如:
.find({},{})