【问题标题】:Startup script to start a detached screen and run a bash script inside启动脚本以启动分离的屏幕并在其中运行 bash 脚本
【发布时间】:2021-09-07 06:05:11
【问题描述】:

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

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

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

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

我使用 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 个屏幕。我尝试将& 甚至&& 附加到末尾,但没有成功。我会继续搜索。

【问题讨论】:

    标签: bash ubuntu npm


    【解决方案1】:

    使用完整路径调用 npm:

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

    或

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

    【讨论】:

    • 谢谢 lojza!使用完整路径调用 npm 有效!我还必须将节点二进制文件的位置添加到我的路径中,因为当我调用 npm 的完整路径时,我会收到一个错误,node, file or directory not found。
    猜你喜欢
    • 2020-02-17
    • 1970-01-01
    • 2022-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-20
    相关资源
    最近更新 更多