【问题标题】:Npm run is not working inside crontab (cronjob)Npm run 在 crontab (cronjob) 中不起作用
【发布时间】:2020-04-21 11:51:54
【问题描述】:

我想使用 Makefile 和 shellscript 使用 nuxt 生成和渲染静态内容。

生成文件

deploy-content: ## Generate content using nuxt
       @echo $(/bin/bash -c cd /var/www/nuxt; npm run --prefix /var/www/nuxt generate)

render.sh

#!/bin/sh

# start generating content in background
make deploy-content > /dev/null 2>&1 &

Crontab -e :) :

# Midnight 2 am
0 2 * * *        cd /var/www/generate/ && make deploy-content > /dev/null 2>&1 &

还请考虑以下事项:

  • render.sh 拥有 +x 权限。
  • Makefilerender.sh 位于不同的目录(不是 在 /var/www/nuxt 中)。
  • 当我从 shell 运行 shellscript 时,它可以正常工作,但不能在 crontab 中运行。
  • 我还尝试将 npm 命令直接放入 crontab 中。 (没用)

有人可以帮助我吗,Pleeeeeeeeeeease?可能是我错过了什么,没有意识到。 :)

非常感谢,干杯!

【问题讨论】:

  • 执行是否在不同于所有者的用户或组下运行? rwx------ 你的文件权限是什么?也许只是为了测试目的尝试 rwxrwxrwx 看看它是否有效。
  • 它在同一个用户/组下运行,并且从 shell 中完美执行,但不是来自 crontab @Elijah
  • 我对 CRON 不是很熟悉,但我在 UNIX 中遇到的大多数问题都是基于权限的问题。我会尝试出于测试目的将文件和文件夹更改为 rwxrwxrwx。然后再次尝试 cron。
  • 很好奇。是权限问题还是问题仍然存在?
  • 你能提供render.sh吗?它是脚本中唯一的一行吗?如果是,则可能与您在后台运行它有关,因此它可以在您从 shell 执行它的地方工作,该 shell 在脚本执行后保持打开状态;但它不适用于 crontab,它可能会在运行脚本后关闭“会话”。

标签: shell ubuntu npm cron nuxt.js


【解决方案1】:

最简单的情况:

Crontab

* * * * *        /usr/bin/make -C /var/www/generate/ > /tmp/log.txt

Makefile (/var/www/generate/Makefile)

deploy-content:
    /bin/bash -c "cd /var/www/nuxt/; npm ls"

然后输出应该在

cat /tmp/log.txt

【讨论】:

  • 这与我正在寻找的不同。无论如何,谢谢。
  • 唯一的区别应该是您将“npm ls”更改为“npm run --prefix /var/www/nuxt generate”以确认它是否实际运行。然后更新您确认它有效的时间
  • cron 失败的最常见原因是您的 PATH 和环境未设置。尝试设置您的路径或采购您的个人资料。如果你去掉“> /dev/null 2&1”,你也可以看到命令失败的原因。然后 Cron 将通过电子邮件发送输出/错误。
  • 你的 cron 语法对我来说都很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 2018-05-05
  • 1970-01-01
  • 2018-01-09
  • 2020-05-08
  • 2019-12-22
  • 1970-01-01
相关资源
最近更新 更多