Самое простое, что вы делаете неправильно - это использовать &
в конце командной строки exec - это означает, что вы дважды разветвляетесь, и процесс, который вы wait
выполняете, немедленно завершится.
На самом деле я не вижу, для чего здесь вам нужна fork
/ exec
, хотя, если вы не перенаправляете ввод-вывод и ничего не делаете, но ждете exec
обработать до конца;это то, для чего system
.
system("./deployer -d $domain.$enviro -e $enviro >> /tmp/$domain.$enviro")
and logit("Problem running deployer: $?");
легко послужит заменой первых двенадцати строк вашего кода.
И, как проходная заметка, fork
не делаетвернуть -1 при неудаче;он возвращает undef
, так что вся проверка полностью ложная.