मैं कठपुतली सेवा के पीछे सॉफ़्टवेयर को प्रतिस्थापित करते समय दौड़ की स्थिति से बचने की कोशिश कर रहा हूं।फ़ाइल बदलने से पहले मैं कठपुतली को एक सेवा कैसे रोक सकता हूं?
कि, कठपुतली को रोकने के लिए सेवा की जरूरत है ऐसा करने के लिए, निष्पादन योग्य है, तो शुरू सेवा की जगह। क्या ऐसा करने में कठपुतली से बात करने का कोई तरीका है? चीजों को करने का इसका पसंदीदा तरीका निष्पादन योग्य को प्रतिस्थापित करना प्रतीत होता है, फिर स्थिति की जांच करें और यदि आवश्यक हो तो सेवा फिर से शुरू करें।
(। इस उदाहरण काल्पनिक है असली रेस स्थिति इस सरल के पास कहीं नहीं है ...)
यहाँ कठपुतली प्रकट मैं इस समस्या को अनुकरण करने के लिए उपयोग कर रहा हूँ है:
$O = '1'
$I = '2'
exec { hi :
command => '/bin/echo "$(/bin/date +%s) puppet says hello" >> /tmp/freebird.log' ,
}
file { exe :
name => "/tmp/freebird" ,
ensure => present ,
owner => "root" ,
group => "root" ,
mode => "0555" ,
source => "/root/test-v$I" ,
}
file { init :
name => '/etc/init.d/freebird' ,
ensure => present,
owner => "root",
group => "root",
mode => "0555",
source => "/root/test.init" ,
}
service { freebird :
ensure => running,
enable => true,
hasrestart => true,
hasstatus => true,
require => [ File[init], File[exe] ],
}
यहाँ है test-v1 फ़ाइल। test-v2 फ़ाइल समान है लेकिन v=2
के साथ है।
#!/bin/bash
v=1
while true
do
echo "$(date +%s) $v" >> /tmp/freebird-v.log
sleep 1
done
और init.d स्क्रिप्ट:
#!/bin/bash
#
# /etc/rc.d/init.d/freebird
# chkconfig: 2345 90 10
# description: freebird
# Provides: freebird
# Required-Start: $syslog $remote_fs
# Should-Start:
# Required-Stop: $syslog $remote_fs
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: freebird
# Source function library.
. /etc/rc.d/init.d/functions
xme=freebird
export PATH=/sbin:/bin:/usr/sbin:/usr/bin
function L() {
echo "$(date +%s) $*" 1>&2
echo "$(date +%s) $*" >> /tmp/$xme.log
}
case "$1" in
(start) L $1 $xme
(/tmp/$xme &)
;;
(stop) L $1 $xme
fuser -k /tmp/$xme
;;
(status) L $1 $xme
/sbin/fuser /tmp/$xme >/dev/null 2>&1
;;
(restart) L $1 $xme
$0 stop
$0 start
;;
(*)
echo "Usage: $xme {start|stop|status|restart]"
exit 1
;;
esac
M0dlx, धन्यवाद। आपकी टिप्पणी ने मुझे सही रास्ते पर धक्का दिया। यदि मैं इसे सब स्क्रैच से करना चाहता था, तो मैं निश्चित रूप से इसे संभालने के लिए कठपुतली को मजबूर करने के बजाय ओएस पैकेजर की पूर्व-इंस्टॉल सुविधा का उपयोग करता। और एफपीएम इतना आसान बनाता है ... – bugi
@ m0dlx, मुझे एक संदेह है। क्या होगा यदि मेरा मैनिफेस्ट 'फ़ाइल [' एक्स '], फ़ाइल [' वाई '], फ़ाइल [' Z '] -> सेवा [' XYZ '] की तरह है {सदस्यता लें: फ़ाइल [' एक्स ',' वाई ']} ' ? सेवा को 'फ़ाइल' जेड के निर्माण के बाद ही निष्पादित/पुनरारंभ किया जाएगा या यह प्रत्येक पल 'फ़ाइल एक्स/वाई/जेड' में संशोधित किया जाएगा। – harshad