流浪汉+;ubuntu+;服务+;共享文件夹(nfs)和#x2B;靴子

流浪汉+;ubuntu+;服务+;共享文件夹(nfs)和#x2B;靴子,ubuntu,vagrant,boot,shared-directory,Ubuntu,Vagrant,Boot,Shared Directory,我有一个流浪者盒子,里面安装/启动一个Ubuntu 12.04虚拟机(Virtualbox),里面有一个Tomcat应用程序。Tomcat应用程序目录(WAR文件的结果)实际上是我的项目目录(主机上)中的NFS共享文件夹 我想让Tomcat在VM引导时自动启动,但只有在NFS目录可供访问之后 实际上,我得到了不同的服务,它们应该按顺序引导(postgres->tomcat->apache),因为它们彼此依赖 我怎样才能做到这一点 我尝试将以下脚本放入/etc/init.d/start\u my\

我有一个流浪者盒子,里面安装/启动一个Ubuntu 12.04虚拟机(Virtualbox),里面有一个Tomcat应用程序。Tomcat应用程序目录(WAR文件的结果)实际上是我的项目目录(主机上)中的NFS共享文件夹

我想让Tomcat在VM引导时自动启动,但只有在NFS目录可供访问之后

实际上,我得到了不同的服务,它们应该按顺序引导(postgres->tomcat->apache),因为它们彼此依赖

我怎样才能做到这一点

我尝试将以下脚本放入
/etc/init.d/start\u my\u app

#!/usr/bin/sh
service postgresql start
service tomcat7 start
service apache2 start
…和“chkconfig-s启动我的应用程序”,但它似乎不起作用。服务没有运行

有人能帮我吗


这个问题与。

我建议使用配置自动化工具,例如用于资源调配-我发现它的声明性语言易于学习,并且比shell脚本更易于阅读/维护

以下是我试图通过木偶清单来实现您所描述的:

mount { "/path/to/mountpoint":
    device  => "hostname:/path/to/nfs",
    fstype  => "nfs",
    ensure  => "mounted",
    options => "defaults",
    atboot  => true,
}
->
service { "postgresql":
    ensure => running,
}
->
service {'tomcat':
    name   => "tomcat7",
    ensure => running,
}
->
service {'apache2':
    ensure => running,
}
描述了四种资源:nfs装载和服务;它们之间的箭头(
->
)确保应用它们的顺序与写入文件的顺序相同(否则无法保证)。有关语法的详细信息,请查看文档,但我认为这足够简单,可以不言自明

(当然,通过确保为服务安装包,或者适当地设置配置文件,等等,它可以更加完善)

Vagrant内置了对puppet配置的支持,因此您可以将上述代码放在名为
site.pp
的文件中,并将其放在Vagrant文件旁边的文件夹中,例如
清单
。然后将以下内容添加到文件:

config.vm.provision "puppet" do |puppet|
    puppet.manifests_path = "manifests"
    puppet.manifest_file  = "site.pp"
end

我只使用puppet作为一个例子,因为这是我的一些经验-其他一些自动化工具的例子是:,

而不是
init.d
脚本,你可以使用一个Upstart脚本来监听Vagrant自己的
Vagrant挂载的
事件,如下所示:

# /etc/init/my_app.conf

description "Run postgres, apache, and tomcat"

start on vagrant-mounted
stop on runlevel [016]

script
    service postgresql start
    service tomcat7 start
    service apache2 start
end script

如果,像我一样,你希望这是在流浪汉的文件,你会非常失望。它唯一的公开承认是一个

我想你的建议是通过puppet而不是Vagrant安装NFS,以确保NFS在启动服务之前运行。是否正确?我相信我理解了您的所有示例,但与装载NFS共享文件夹相关的部分除外:我是否需要从vagrant文件中删除
config.vm.synced_文件夹“,“/vagrant”,键入:“NFS”
?我怎样才能引用主机名呢?我做了一个错误的假设;我以为您已经“手动”安装了nfs文件夹,而不是使用一个Vagrant同步文件夹,但实际上这并没有多大区别。您可以保留这两个设置—如果在应用puppet清单时nfs已经可用,那么它不会对此做任何事情,而是移动到下一个资源。要获取主机名(并检查装载选项),请尝试启动VM,并使用不带参数的
mount
命令-它应该显示所使用的确切选项(包括主机ip或名称),以便您可以基于它更新傀儡部件。