首页 > 解决方案 > 启动脚本以启动分离的屏幕并在其中运行 bash 脚本

问题描述

我编写的启动脚本有问题,我终其一生都无法弄清楚出了什么问题。本质上,我想启动一个分离的屏幕,将一个守护进程启动命令传递到屏幕,然后更改目录并在我更改到的目录中运行“npm start”。

最好,我想将屏幕脚本安装为服务,但我没有成功。屏幕根本不会启动。我已经screen -list,甚至sudo screen -list在安装服务的时候。我试过了Type=forking Type=oneshot,还是没有。

到目前为止,Crontab 是唯一的东西。

我已经让屏幕保持打开状态,但是当我重新连接到屏幕时出现错误:/path/to/script.sh : 6: /path/to/script: npm: not found。

我使用 nvm 来安装 node 和 npm。我尝试链接到 /usr/bin 或 /usr/local/bin 没有成功。链接太多的错误,或者未找到节点,即使它已链接。

对于我拥有的脚本,启动屏幕的主脚本是

#!/bin/sh
SCRIPT_DIR=/path/to/script/folder/in/user/directory

screen -dmS nameofscreen bash -c $SCRIPT_DIR/script_to_run.sh

并且应该运行的脚本如下:

#!/bin/sh
USR_BIN=/usr/local/bin

$USR_BIN/daemon_to_start -arg1 -arg2 &&
sleep 2
cd /path/to/npm/app/folder && npm start
sleep 3
exec $SHELL

再一次,使用这些脚本,屏幕会启动并保持打开状态,但是会抛出 npm not found 错误。另外,如果我使用 npm 的绝对目录,找不到节点成为新的错误。我在这上面花了三天时间,从来没有写过剧本。我开始失去理智了。

请帮忙!

编辑:在 lojza 的帮助下并将节点二进制文件添加到我的 PATH 中,它有点工作!现在,当启动脚本运行时,只会启动一个屏幕。该脚本应该启动 4 个屏幕。我试过追加&,甚至&&到最后都没有运气。我会继续寻找。

标签: bashubuntunpm

解决方案


使用完整路径调用 npm:

/path/to/npm/app/folder/npm start
/usr/local/bin/npm start #in my case

或者

cd /path/to/npm/app/folder && ./npm start

推荐阅读