Tôi đang cố gắng tránh tình trạng chạy đua khi thay thế phần mềm đằng sau Dịch vụ bù nhìn.Làm cách nào để tôi có thể chặn con rối trước khi thay thế một tệp?
Để làm điều đó, con rối cần phải dừng dịch vụ, thay thực thi, sau đó bắt đầu dịch vụ. Có cách nào để nói con rối làm việc đó không? Cách làm việc ưa thích của nó dường như là thay thế tệp thực thi, sau đó kiểm tra trạng thái và bắt đầu lại dịch vụ nếu cần.
(. Ví dụ này được contrived Tình trạng đua thực là hư không gần đơn giản này ...)
Đây là con rối biểu hiện tôi đang sử dụng để mô phỏng vấn đề này:
$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] ],
}
Đây là test-v1 tệp. Tệp test-v2 giống nhau nhưng với v=2
.
#!/bin/bash
v=1
while true
do
echo "$(date +%s) $v" >> /tmp/freebird-v.log
sleep 1
done
Và kịch bản 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, cảm ơn bạn. Nhận xét của bạn đã đẩy tôi vào đúng đường dẫn. Nếu tôi làm tất cả từ đầu, tôi chắc chắn sẽ sử dụng tính năng cài đặt sẵn của trình đóng gói OS thay vì buộc con rối xử lý việc này. Và fpm làm cho điều đó dễ dàng hơn nhiều ... – bugi
@ m0dlx, tôi có một nghi ngờ. Điều gì sẽ xảy ra nếu tệp kê khai của tôi giống như 'Tệp ['X'], Tệp ['Y'], Tệp ['Z'] -> Dịch vụ ['XYZ'] {đăng ký: Tệp ['X', 'Y']}' ? Dịch vụ sẽ được thực hiện/khởi động lại chỉ sau khi 'file 'Z'' đã được tạo hay nó sẽ khởi động lại @ mọi khoảnh khắc' tập tin X/Y/Z' đã được sửa đổi. – harshad