【问题标题】:Running a global node module binary from crontab从 crontab 运行全局节点模块二进制文件
【发布时间】: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


【解决方案1】:

我在我的 macbook 中使用 Oh-my-zsh,所以我尝试了很多方法来运行 crontab 任务,但最后,我的解决方案是在运行命令之前添加 .zshrc。

*/30 * * * * . $HOME/.zshrc; node  /path/for/my_script.js

此任务每 30 分钟运行一次,并使用 .zshrc 配置文件执行我的节点命令。不要忘记在 $HOME 变量之前使用点。

顺便说一句,您可以运行附加到您的 zsh 环境的任何命令。

【讨论】:

    猜你喜欢
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 2017-07-15
    相关资源
    最近更新 更多