From 1829949d6e4d888e93e6e515f95615f5a865fb23 Mon Sep 17 00:00:00 2001 From: Pavel Kartavyy Date: Mon, 29 Dec 2014 21:52:50 +0300 Subject: [PATCH] init.d: lock should be released in child process after fork --- tools/init.d/template | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/tools/init.d/template b/tools/init.d/template index 7b8b4d61179..b2ecbe66dd8 100755 --- a/tools/init.d/template +++ b/tools/init.d/template @@ -121,8 +121,8 @@ start() for i in $(seq 1 $NUMBER_OF_PROCESSES); do if ! is_running $(generate_pid_name $i); then rm -f $(generate_pid_name $i) - # TODO может лучше передавать демону номер процесса, а демон сам будет делать все необходимые подстановки - su -l $USER -s $SHELL -c "exec -a $(generate_program_name $i) \"$BINDIR/$PROGRAM\" --daemon --pid-file=\"$(generate_pid_name $i)\" --config-file=\"$CNFFILE\" $(specific_log_file_for_each_process $i)" + # чтобы лок не удерживался в течении времени жизни дочернего процесса, освободим лок + su -l $USER -s $SHELL -c "flock -u 9; exec -a $(generate_program_name $i) \"$BINDIR/$PROGRAM\" --daemon --pid-file=\"$(generate_pid_name $i)\" --config-file=\"$CNFFILE\" $(specific_log_file_for_each_process $i)" EXIT_STATUS=$? if [[ $EXIT_STATUS -ne 0 ]]; then break @@ -256,6 +256,9 @@ main() } ( - flock -n 9 || echo "Init script is already running" && exit 1 - main + if flock -n 9; then + main "$@" + else + echo "Init script is already running" && exit 1 + fi ) 9> $LOCKFILE