当我启动我的 Ubuntu 12.04 vmware VM 时,我打开终端并运行以下命令。
sudo /etc/init.d/postgresql start
sudo /etc/init.d/apache2 start
cd sites/name_of_rails_app
bundle exec rake sunspot:solr:start
bundle exec rake sunspot:solr:start RAILS_ENV=test
rails s
然后 rails 服务器就会在该终端窗口中启动。
有没有办法让整个过程或大部分过程自动化?除了rails s
终端之外,其他一切都可以自动化,是吗?
我查看了启动应用程序,并且我的 postgresql 命令(包括“sudo”)在其中,但我仍然必须手动启动 postgresql 服务器,所以我不确定该工具如何工作/是否工作。
谢谢!
答案1
我并不擅长这些事情,但是这里有一些关于从哪里开始寻找的想法。
以上大部分内容可能对于您的情况来说有些过度,因此请集中精力考虑建议 2 和建议 4。如果您需要在前台运行某些内容,这一点尤其重要,因为其他两个建议没有关联的前台。
既然您确实提到了神奇的词“服务器”,那么其他两个选项可能也值得考虑。
1) Linux 启动时,它会经过一个或多个运行级别才能开始运行。(不同发行版的运行级别略有不同。)每个运行级别都有一组脚本,这些脚本在启动时执行。脚本本身位于 /etc/init.d 中。每个运行级别都有一个目录 /etc/rcx.d,其中 x 是运行级别 0 - 6。我认为 3 是正常运行,但您必须检查一下。
在每个目录中,您都将符号链接放在 /etc/init.d 中的脚本中,并以两位数字前缀命名它们。当运行级别启动时,其目录中的所有脚本都会按前缀数字的顺序执行,以便事情以可预测的有序方式发生。将一个链接(带有高数字前缀,以便在已经存在的所有其他内容之后执行)添加到您的脚本中(或适合您系统的运行级别)。
如果您想更进一步,/etc/init.d 中有一个名为skeleton的文件,它向您展示了所有可用的附加功能。例如,您可以将脚本编写为一个大case语句,其中包含START、STOP等case,并在适当的运行级别中对其进行符号链接以启动程序,然后在系统关闭时将其关闭。如果您这样做,您添加到关闭运行级别的符号链接应该有一个较低的数字前缀,以便在它可能需要的所有其他东西被关闭之前完成它。
查看 Skeleton 中的 PATH 注释。在运行级别更改期间可用的路径非常有限,因此您无法访问所有内容。
如果您选择这条路线,请进行备份并准备好实时 CD 等,以防您执行某些破坏启动顺序的操作。
2)当 bash 在您的用户上启动时(通常每个会话一次),它会运行 ~/.profile,它本身是一个 bash 脚本,可以为您的特定用户运行您想要的任何内容。
当启动单个 bash shell 时(每个会话可以发生多次),另一个脚本 ~/.bashrc 也会被执行。您可以根据需要从其中任何一个运行脚本。这更接近于您通常在终端中执行的操作,因此执行起来更容易、更安全。
由于以这种方式运行的事情与您的用户相关联,因此它们将在您注销时终止,除非您执行特殊操作,例如在脚本中使用 nohup。
3) 您可以将脚本存储在系统空间的某个位置,例如 /usr/bin 或 /usr/local/bin,并通过在系统 crontab 或用户的 crontab 中添加条目来设置 cron 来运行它。
如果您的系统长时间处于运行状态,则应在脚本中添加检查,以便如果它的另一个实例已在运行或自上次启动以来已经运行,它就不会执行任何额外的操作。
如果您使用笔记本电脑或其他经常关机的系统,请确保 anacron 已安装并正常运行。启动后不久,它会(过于简单)查看 cron 活动,以查看系统关闭时是否遗漏了任何活动并运行它们。通常,将某些活动安排在午夜后不久运行可以简化操作,这样就不太可能在同一天运行两次。
4) 如果您使用 kde 或 gnome 等 GUI 桌面,它们具有可为您运行程序的启动脚本实用程序。kde 将它们放在 $HOME/.kde/Autostart 中。您可以将脚本放在那里。
适用与建议 2 中提到的相同考虑。
答案2
创建您自己的 shell 脚本文件并将您的启动代码(您始终在终端上编写)粘贴到您的 shell 脚本文件源代码中:
#!/bin/sh
sudo /etc/init.d/postgresql start
sudo /etc/init.d/apache2 start
cd sites/name_of_rails_app
bundle exec rake sunspot:solr:start
bundle exec rake sunspot:solr:start RAILS_ENV=test
rails s
然后将这个 shell 脚本放在某处并将其文件路径添加到您的$PATH
。然后打开您的终端并输入您的 shell 脚本的文件名并按ENTER
。