我是 Linux 新手,所以不知道如何做我想做的事。
我有my_script.sh
(当然是可执行的)这样的:
#!/usr/bin/env bash
mate-terminal -e "bash -c 'cd /home/my_user/ruby_projects/my_app/';'rails s';exec $SHELL"
笔记:该脚本应该打开终端,将当前目录更改为该终端中的给定目录,启动 Rails 应用程序而不关闭终端。所有这些事情都应该在系统启动后自动完成(现在我手动运行这个脚本)。脚本包含一些类似的命令,因此应该打开一些终端。
如果我打开终端,转到脚本的目录,运行./my_script.sh
- 一切都很完美,并且完全按照我想要的方式工作,但每次启动时我都必须手动执行此操作。
所以我转到控制中心 -> 启动应用程序 -> 添加 -> 浏览我的 shell 脚本,给出名称 -> 添加
之后我重新启动系统并...:(我看到的所有内容都是屏幕上闪烁的几下(即伴侣终端的打开和关闭)-一切都发生得如此之快,以至于我看不到它显示的内容(但是,所有终端都应保持打开状态!),当然,所有 Rails 应用程序均已关闭,如何解决此问题?
更新:起初我的想法是,并不是所有 Rails 应用程序所需的进程都启动了,这就是终端简单关闭的原因,所以我尝试添加sleep 10
脚本以等待一切正常启动,但这没有改变 - 闪烁只是延迟了10 秒。
答案1
经过一天的努力,我终于得到了我需要的更好的东西:
#!/bin/bash
# Adds RVM to needed paths to start servers with needed Ruby version
PATH=$PATH:$HOME/.rvm/bin
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
# I need this server to run in background
startLocalRedmineServer()(
cd /home/adminuser/ruby_projects/redmine/
rails server webrick -e production --port 3001
)
# I need this to be done in background also
proxyLocalRedmineServer()(
proxylocal 3001 --host=mylocalredmine
)
# This thing should open mate-terminal, run start server, so that I can see real time logs, and stay on the screen in case I need it to be restarted
startOtherLocalServer()(
mate-terminal -e "bash -c 'cd /home/adminuser/ruby_projects/project_abc/';'rails s';'exec /bin/bash'"
)
# This thing should open mate-terminal and start proxying + remain opened
proxyOther()(
mate-terminal -e "bash -c 'proxylocal 3000 --host=projectabc'; 'exec /bin/bash'"
)
startLocalRedmineServer &
proxyLocalRedmineServer &
startOtherLocalServer &
proxyOther &
wait
正如我在上面的问题中所写的那样,添加了此脚本以用于启动。系统启动后,此脚本会添加缺少的新路径,然后启动 4 个单独的子进程。其中两个 - 即Redmine服务器及其代理 - 在后台工作(我不需要停止它们或更改任何内容)。另外两个功能打开单独的终端,启动本地 Rails 服务器并代理它,以便我可以在需要时停止它或重新启动。