vagrant/puppet init.d脚本报告在未启动时启动

vagrant/puppet init.d脚本报告在未启动时启动,vagrant,puppet,init.d,Vagrant,Puppet,Init.d,所以,为了解决一个相当大的问题,我尝试了多种不同的解决方法,试图让它正常工作,但是在puppet和实际服务器之间发生了一些让我难以置信的事情 基本上,我有一个init.d脚本/etc/init.d/rserve,它被正确地复制过来,当从服务器上的命令行使用时,它可以完美地工作(即sudo service rserve start | stop | status),该服务基于对不同命令使用echo$?进行测试返回正确的错误代码 puppet服务声明如下: service { 'rserve':

所以,为了解决一个相当大的问题,我尝试了多种不同的解决方法,试图让它正常工作,但是在puppet和实际服务器之间发生了一些让我难以置信的事情

基本上,我有一个init.d脚本
/etc/init.d/rserve
,它被正确地复制过来,当从服务器上的命令行使用时,它可以完美地工作(即
sudo service rserve start | stop | status
),该服务基于对不同命令使用
echo$?
进行测试返回正确的错误代码

puppet服务声明如下:

service { 'rserve': 
   ensure => running, 
   enable => true, 
   require => [File["/etc/init.d/rserve"], Package['r-base'], Exec['install-r-packages']] 
}
当puppet点击此服务时,它运行其状态方法,发现它没有运行,并将其设置为正在运行,并可能启动服务,puppet的输出如下:

==> twine: debug: /Schedule[weekly]: Skipping device resources because running on a host 
==> twine: debug: /Schedule[puppet]: Skipping device resources because running on a host 
==> twine: debug: Service[rserve](provider=upstart): Could not find rserve.conf in /etc/init 
==> twine: debug: Service[rserve](provider=upstart): Could not find rserve.conf in /etc/init.d 
==> twine: debug: Service[rserve](provider=upstart): Could not find rserve in /etc/init 
==> twine: debug: Service[rserve](provider=upstart): Executing '/etc/init.d/rserve status' 
==> twine: debug: Service[rserve](provider=upstart): Executing '/etc/init.d/rserve start' 
==> twine: notice: /Stage[main]/Etl/Service[rserve]/ensure: ensure changed 'stopped' to 'running'
现在,当我实际使用
sudo service rserve status
ps aux | grep rserve
检查服务时,该服务实际上没有运行,快速
sudo service rserve start
显示init.d脚本工作正常,并在服务启动时启动rserve,并且在ps aux中可见

这里有我遗漏的东西吗?我甚至尝试通过创建一个puppet
Exec{“sudo-service-rserve-start”}
来启动该服务,它仍然报告它已成功执行,但该服务仍然没有在服务器上运行

tl;puppet博士说,一个服务在没有启动的时候启动,并且init.d脚本、退出代码或其他方面似乎没有问题

更新1 在下面的注释中,您可以看到我尝试在自己的test.pp文件中隔离服务,并在服务器上使用
puppet apply
运行它,结果相同

更新2 我现在尝试使用命令创建一个.sh文件,以使用单独的vagrant规定启动Rserve,最终可以看到一个错误。但是,该错误令人困惑,因为在运行
sudo service rserve start
时不会发生该错误,vagrant执行.sh命令的方式或执行该命令的用户在执行时会导致init.d脚本内的命令中删除一个选项

此错误是R和Rserve特定的,但它抱怨缺少一个标志
--no save
,当它实际上存在于init.d脚本中并且在ssh进入vagrant框并使用init.d命令时被正确地传递给R时,需要将其传递给R

更新3 我已经设法使整个过程在这一点上工作,然而,这是其中一种情况,在这种情况下,使其工作的步骤并没有真正揭示出对原始问题存在原因的任何理解。我将复制损坏的版本,看看是否可以使用评论中提到的其中一种方法找出到底发生了什么,这样我就有可能发布一个答案,以帮助以后的人。如果有人知道为什么会发生这种情况,请随时回答。为了稍微澄清一下情况,以下是一些细节:

  • 使用puppet正确安装了服务的依赖项
  • 该服务使用ubuntu上/etc/init.d中的脚本启动|停止Rserve服务
  • 所讨论的软件是R(R-base)和Rserve(其他LANG和R之间的通信层)
  • 从命令行运行命令
    sudo service rserve start
    ,工作正常
  • init.d脚本返回了正确的错误代码
  • 正在使用
    服务{}
    块从puppet启动服务
  • Puppet报告在服务未启动时启动该服务
  • 为一个包含
    sudo service rserve start
    的.sh文件向Vagarants文件添加一个provision选项,发现当由Vagarants provisioning运行时,init.d中的某些参数被忽略,而不是由shell上的活动用户运行

  • 傀儡清单(或更晚的时间,而不是傀儡清单)中一定有“稍后”发生的事情会改变流浪主机的状态。我已经尝试手动安装此特定服务的依赖项,然后完全隔离此服务条目(删除require属性)并使用puppet apply在test.pp文件中运行独立服务,结果没有变化,puppet输出与上述完全相同。因此,在puppet链中(我所说的)没有其他任何东西会影响它。您能否以
    logger-t rserve init“now doing X with variable$Y”
    的形式将调试输出添加到initscript中?这将帮助您确定通过木偶与直接通过sudo运行的区别。-还要注意,Puppet使用的是
    upstart
    提供程序,我觉得这不一定合适,因为您只需要Puppet调用init脚本。您可能需要尝试
    provider=>'init'
    provider=>'service'