這是我收到的錯誤:
ubuntu@sync1:/etc/puppet$ sudo /usr/bin/apt-get -q -y -o DPkg::Options::=--force-confold install rabbitmq-server
Reading package lists...
Building dependency tree...
Reading state information...
rabbitmq-server is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 2 not upgraded.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Setting up rabbitmq-server (3.2.2-1) ...
* Starting message broker rabbitmq-server * FAILED - check /var/log/rabbitmq/startup_\{log, _err\}
[fail]
invoke-rc.d: initscript rabbitmq-server, action "start" failed.
dpkg: error processing rabbitmq-server (--configure):
subprocess installed post-installation script returned error exit status 1
E: Sub-process /usr/bin/dpkg returned an error code (1)
ubuntu@sync1:/etc/puppet$
在我運行 sudo puppet apply manifests/site.pp 後會發生這種情況。
這是我的兔子課程:
# See https://github.com/puppetlabs/puppetlabs-rabbitmq
class my_rabbitmq ($environment, $type, $user, $password) {
# case $environment {
# staging: {
# #@todo
# }
# production: {
# #@todo
# }
# }
#
# case $type {
# sync: {
# #@todo
# }
# async: {
# #@todo
# }
# }
class { '::rabbitmq':
delete_guest_user => true,
version => '3.2.2',
}->
rabbitmq_user { 'richard':
admin => true,
password => 'richard_password',
provider => 'rabbitmqctl',
}->
rabbitmq_user_permissions { 'richard@/':
configure_permission => '.*',
read_permission => '.*',
write_permission => '.*',
provider => 'rabbitmqctl',
}
}
我正在 Ubuntu 12.04 LTS VM 上嘗試此操作。有任何想法嗎?這讓我發瘋,我已經被困了幾個小時試圖弄清楚這一點。
答案1
我也有這個問題。原因是在 Ubuntu 上安裝“rabbitmq-server”軟體包後,一個rabbitmq實例啟動。這是設計使然。可悲的是。
至於解決辦法,我還沒找到。
編輯
我不知道您是否屬於這種情況,但就我而言,我將 puppet 中的節點名稱從“兔子”更改為其他名稱。
簡單的解釋是,正如我所提到的,安裝rabbitmq-server會導致rabbitmq-server服務運作。預設情況下,它使用節點名稱“rabbit”。
就我而言,puppet 出現了,配置了rabbitmq,然後在嘗試啟動服務之前,運行“/etc/init.d/rabbitmq-service status”,以檢查它是否已經在運行。
在理想的情況下,答案是“是”,因為它實際上正在運行,但在這種情況下,“/etc/init.d/rabbitmq-service”腳本使用配置的節點名稱來檢查和查看實例是否正在運行- 當puppet 更改/etc/rabbitmq/rabbitmq-env.conf 中的節點名稱時,這完全破壞了服務腳本確定其是否正在運行的能力,所以當然,腳本返回0,因為它找不到正在運行的實例。
然後,Puppet 嘗試使用新節點名稱啟動新實例,但失敗了,因為一次只有一個服務可以擁有一個端口,而正在運行的實例擁有該端口。
為了解決這個問題,我將 RABBITMQ_NODENAME 設定回“兔子”,一切正常。
我在這裡寫過:
http://www.standalone-sysadmin.com/blog/2014/02/rabbitmq-on-ubuntu-via-puppet/
答案2
http://blog.zugschlus.de/archives/974-Debians-Policy-rc.d-infrastruct-explained.html
Debian 經常因為這種預設設定而受到批評,規範的答案是使用 sysv-rc 提供的策略框架來避免啟動服務。由於這個機制經常被誤解,我寫這篇文章是為了給這個問題帶來更多的困惑。
(部落格文章不是我的)