【发布时间】: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 个屏幕。我尝试将& 甚至&& 附加到末尾,但没有成功。我会继续搜索。
【问题讨论】: