bash - 启动脚本以启动分离的屏幕并在其中运行 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 个屏幕。我试过追加&
,甚至&&
到最后都没有运气。我会继续寻找。
解决方案
使用完整路径调用 npm:
/path/to/npm/app/folder/npm start
/usr/local/bin/npm start #in my case
或者
cd /path/to/npm/app/folder && ./npm start
推荐阅读
- docker - Docker 卷新手问题
- c# - Jetbrains Rider 中的启动项目选项
- github-actions - 如何安排 GitHub Actions 每晚构建,但仅在最近代码更改时才运行它?
- opc-ua - 节点的描述属性是否可以根据节点的值而改变?
- c++ - 为什么我的 OpenGL 上下文在此函数中为空,而在其他函数中不为空
- sql - 如何在 SQL Server 上创建一个数据库角色,该角色的用户只能从一个视图中选择,而不能从视图中使用的表中选择?
- python - 我无法运行 scapy shell,但它确实作为 python 脚本中的模块工作
- php - 如何在新订单电子邮件中将客户的所有详细信息发送给管理员,并将客户的一些详细信息发送给供应商
- flutter - Flutter Flat Button 在其可见边框之外是可点击的
- excel - 为什么几分钟后正常运行的 ODBC 连接会失败(Excel VBA / Oracle)?