(shell脚本文件)pm2:在crontab任务中找不到命令

问题描述 投票:0回答:3

我的 shell 脚本

#!/bin/bash    
pm2 start server.js 

我的 crontab 任务

* * * * * /home/ec2-user/abcd/test.sh > /home/ec2-user/cron.log 2>&1

我从日志中得到的信息:

home/ec2-user/abcd/test.sh: line 2: pm2: command not found

如何解决?

备注:

1.当我执行./test.sh时,运行正常

2.pm2 - 显示

~/.nvm/versions/node/v14.16.1/bin/pm2
shell cron pm2 cron-task
3个回答
2
投票

问题可能是因为 cron 作业执行时尚未设置

PATH
环境变量,这就是为什么你的 shell 脚本找不到
pm2
。您必须输入
pm2
的完整地址。

例如,如果

pm2
位于
/usr/bin/
中:

#!/bin/bash
/usr/bin/pm2 start server.js

或者您可能只想在 shell 脚本中要执行的命令之前设置

PATH
env。

正常情况下,当您在终端中执行程序时,环境变量已正确设置。这就是为什么您可以在终端中毫无问题地运行 shell 脚本。


0
投票

像其他答案中提到的那样设置路径命令。

PATH="/usr/bin:/bin:/home/ec2-user/.nvm/versions/node/v14.16.1/bin"

接下来,找到 server.js 文件的路径并使用该路径添加 pm2 start 命令。

pm2 start /home/ec2-user/ .....your path to the file..... /server.js

完整代码:

#!/bin/bash
PATH="/usr/bin:/bin:/home/ec2-user/.nvm/versions/node/v14.16.1/bin"
pm2 start /home/ec2-user/ .....your path to the file..... /server.js

0
投票

您也可以使用

pm2
的内置 cron 功能,我的 linux 服务器上的
pm2
和 cron 也有类似的问题。

您可以使用 pm2 实现同样的效果:

这里...

  • 使用
    pm2
  • 启动 cron 作业
pm2 start your-app-name --cron "* * * * *" --no-autorestart
  • 使用
    pm2
  • 停止 cron 进程
 pm2 restart your-app-name --cron-restart 0

所有内容都在此处的文档中:https://pm2.keymetrics.io/docs/usage/restart-strategies

就像魅力✨

© www.soinside.com 2019 - 2024. All rights reserved.