2013-09-19 4 views
2

У меня этот код скопирован из linuxaria.com в качестве примера и отлично работает на моем случае, проблема в том, когда я выхожу из терминала inotifywait stop. Я хочу запустить на заднем плане даже после выхода из терминала. как я могу это сделать?run inotifywait на фоне

#!/bin/sh 

# CONFIGURATION 
DIR="/tmp" 
EVENTS="create" 
FIFO="/tmp/inotify2.fifo" 


on_event() { 
    local date=$1 
    local time=$2 
    local file=$3 

    sleep 5 

    echo "$date $time Fichier créé: $file" 
} 

# MAIN 
if [ ! -e "$FIFO" ] 
then 
    mkfifo "$FIFO" 
fi 

inotifywait -m -e "$EVENTS" --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %f' "$DIR" >  "$FIFO" & 
INOTIFY_PID=$! 


while read date time file 
do 
    on_event $date $time $file & 
done < "$FIFO" 

ответ

4

Вы можете запустить скрипт с screen или nohup, но я не уверен, как это поможет, так как сценарий не появляется для входа своего вывода в любой файл.

nohup bash script.sh </dev/null >/dev/null 2>&1 & 

Или

screen -dm bash script.sh </dev/null >/dev/null 2>&1 & 

открестился может также применяться:

bash script.sh </dev/null >/dev/null 2>&1 & disown 

Вы должны просто проверить, какой бы не позволить команде приостановить или повесить трубку, когда терминал выхода.

Если вы хотите, чтобы войти вывод в файл, вы можете попробовать эти версии:

nohup bash script.sh </dev/null >/path/to/logfile 2>&1 & 
screen -dm bash script.sh </dev/null >/path/to/logfile 2>&1 & 
bash script.sh </dev/null >/path/to/logfile 2>&1 & disown 
+0

спасибо большое! оно работает! – user1396982

4

Я сделал «служение» из него. Таким образом, я мог бы остановить/запустить его, как обычный сервис, а также он начнется после перезагрузки:

Это было сделано на дистрибутиве Centos. Так что я не, если он сразу работает на других.

Создайте файл с казнить прямо на в каталоге услуг

/etc/init.d/ SERVICENAME

#!/bin/bash 

# chkconfig: 2345 90 60 

case "$1" in 
start) 
    nohup SCRIPT.SH > /dev/null 2>&1 & 
    echo $!>/var/run/SCRIPT.SH.pid 
    ;; 
stop) 
    pkill -P `cat /var/run/SCRIPT.SH.pid` 
    rm /var/run/SCRIPT.SH.pid 
    ;; 
restart) 
    $0 stop 
    $0 start 
    ;; 
status) 
    if [ -e /var/run/SCRIPT.SH.pid ]; then 
     echo SCRIPT.SH is running, pid=`cat /var/run/SCRIPT.SH.pid` 
    else 
     echo SCRIPT.SH is not running 
     exit 1 
    fi 
    ;; 
*) 
    echo "Usage: $0 {start|stop|status|restart}" 
esac 

exit 0 

Все в шапках вы должны изменить к чему ваше имя сценария.

Линия # chkconfig: 2345 90 60 позволяет запустить сервис при перезагрузке системы. это, вероятно, не работает в ubuntu, как у дистрибутива.

Смежные вопросы