【发布时间】:2019-04-14 02:25:42
【问题描述】:
我正在尝试从我的crontab 中运行一个节点模块 (npm install -g lungo-cli)。
我尝试的是从 crontab 调用节点二进制文件:
* * * * * lungo
运气不好。
然后我尝试了:
* * * * * /usr/local/bin/lungo
再一次,没有运气。
所以最后我做了我认为的解决方法,使用 shelljs 直接从 javascript 文件调用节点模块。
Javascript:
const shell = require('shelljs')
shell.exec('lungo')
我什至尝试在本地运行它!
const lungo = require('lungo-cli/bin/lungo')
const shell = require('shelljs')
const shell.exec('lungo')
Crontab:
* * * * * /usr/local/bin/node $HOME/scripts/lungo.js
它是一样的,它不起作用,似乎crontab 运行在与我的zsh shell 完全不同的环境中,并且找不到除 OSX 特定的二进制文件以外的任何二进制文件,如cat、@ 987654332@、cd等。
我使用 Mac OSX 10.14.1 (Mojave) 和 zsh 作为我的 shell。
我怎么能做到这一点?我希望能够使用 crontab 调用我的节点 cli 程序。
【问题讨论】:
-
它是否在脚本文件中工作?让它在脚本中工作,向脚本中添加任何需要的东西,导出变量,添加
#!/bin/bash任何需要的东西。然后将 crontab 指向脚本文件。调试起来会容易得多。 -
我也试过用 shebang 和所有东西写一个脚本文件,它也不起作用,我输出了一个
echo到一个日志文件,这确实有效,但是,节点 cli 二进制文件迷路了,永远不会执行。 -
你尝试过其他节点模块吗?这可能是lungo 应用程序本身的问题,而不是lungo-cli。也许lungo-cli 期望存在一些在crontab 上下文中不可用的额外环境变量。无论如何它看起来像一个非常基本的包,尝试在没有节点包的情况下执行命令本身。看这里:github.com/sindresorhus/lungo-cli/blob/master/api.js#L15
-
它在crontab之外工作,即使使用shelljs,问题是crontab环境没有读取全局节点bin。
-
用这个 crontab 让它成功运行:
* * * * * /usr/local/bin/node /usr/local/lib/node_modules/lungo-cli./cli.js虽然我想执行二进制文件。
标签: node.js bash cron node-modules