因此,在遇到一个相当重大的问题时,我已经尝试了多种不同的解决方法来尝试使其正常工作,但是木偶和实际服务器之间发生了一些令人难以置信的事情。
基本上,我有一个正确复制的init.d脚本/etc/init.d/rserve
,当从服务器上的命令行使用时工作正常(即sudo service rserve start|stop|status
),服务返回正确的错误代码基于使用echo $?
对不同命令进行测试。
傀儡服务声明如下:
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。
我有什么东西在这里失踪吗?我甚至尝试通过创建一个木偶Exec { "sudo service rserve start"}
来启动该服务,该木偶仍然报告它已成功执行但该服务仍未在服务器上运行。
;傀儡说,一项服务在没有服务的情况下启动,并且init.d脚本,退出代码或其他方面似乎没有任何问题。
更新1
在下面的评论中,您可以看到我尝试将服务隔离在其自己的test.pp文件中,并使用服务器上的puppet apply
运行它,结果相同。
更新2
我现在尝试使用命令创建一个.sh文件,使用单独的vagrant配置启动Rserve,最终可以看到错误。但是,错误令人困惑,因为简单地运行sudo service rserve start
时没有出现错误,这与vagrant执行.sh命令的方式有关,或者它执行它们的用户导致从命令中删除选项init.d脚本执行时。
这个错误是R和Rserve特有的,但它抱怨丢失的标志--no-save
需要传递给R,当它实际存在于init.d脚本中并在ssh'时正确传递。 d进入vagrant box并使用init.d命令。
更新3 我已经设法让整个过程在这一点上起作用,然而,这是使其工作的步骤并不能真正理解原始问题原因的其中一种情况之一存在。我将复制破碎的版本,看看我是否可以使用评论中提到的方法之一弄清楚到底发生了什么,这样我就可以发布一个可以帮助某人以后解决问题的答案。如果有人能够深入了解为什么会发生这种情况,请在此期间随时回答。为了澄清一下情况,这里有一些细节:
sudo service rserve start
按预期工作service {}
块从puppet sudo service rserve start
的.sh文件的Vagrant文件添加一个配置选项,发现在由vagrants配置运行时,init.d中的某些参数被忽略,而不是由shell上的活动用户运行。