Então eu tenho isso para funcionar, mas é um hack muito feio. Para saber como escrever corretamente os scripts de inicialização eu sugiro isso link .
O que eu queria fazer era colocar o processo em segundo plano com "&".
/etc/init.d/myinitscript.sh
#! /bin/sh
case "$1" in
start)
dir=/var/www/www/source/
target=/var/www/www/htdocs/application/cache/target/
inotifywait -m "$dir" --format '%w%f' -e close_write |
while read file; do
cp "$file" "$target"
done & ## <--- why not just put it in the background?
;;
stop)
;;
esac
Isso "funciona" ... para certos valores de "trabalho". "myinitscript.sh" é executado no início e faz o que deve fazer, mas resulta nesse processo interrompido:
$ ps aux | grep -i init
[... snip ...]
root 2341 0.0 0.1 4096 600 ? Ss 18:02 0:00 startpar -f -- myinitscript.sh
[... snip ...]
A causa e possíveis soluções para esse problema pode ser encontrado aqui .
Minha solução subseqüente é feia, e se você está fazendo isso em produção, então você está fazendo errado.
Estou usando dois scripts, um em /etc/init.d e outro em / root.
/etc/init.d/myinitscript.sh
#! /bin/sh
case "$1" in
start)
/root/initscriptbody.sh > /dev/null 2>&1
;;
stop)
;;
esac
Não redirecionar stdout e stderr para / dev / null resulta no processo 'starpar' suspenso. O segundo script contém toda a funcionalidade e é aqui que ele pode ser colocado em segundo plano sem resultar no processo 'starpar' suspenso:
/root/initscriptbody.sh
#! /bin/sh
dir=/var/www/www/source/
target=/var/www/www/htdocs/application/cache/target/
inotifywait -m "$dir" --format '%w%f' -e close_write |
while read file
do
cp "$file" "$target"
done & ## <-- no problem backgrounding this now