[MontelLUG] Esperti di cli e shell venite a me!!! Aiuto con script e caratteri speciali

Samuele samuele.zanin a tiscali.it
Lun 25 Lug 2011 18:11:05 CEST


  Buongiorno.
Ho un programmino da tenere attivo dall'avvio della macchina fino al suo 
spegnimento. La macchina tanto per cambiare è una squeeze.
"So mare bona" è di metterlo tra gli init script, quindi ho recuperato 
un esempio banale di script da mettere in init.d e l'ho modificato (lo 
trovate alla fine del messaggio).

In pratica lo script non fa altro che chiamare il comando start-stop-daemon.
Ora, mi trovo che se lancio il comando da console funziona, se lanciato 
dallo script non va (il programma parte mandando un messaggio di errore).
Aggiungendo un set -x allo script, è saltato fuori l'arcano.
Ho una variabile impostata in questo modo:
DAEMON_OPTS=" -i br0 >> /var/log/urlsnarf.log"
Ora, quella redirezione viene interpretata in modo diverso da quanto mi 
aspettassi.
Ecco il messaggio di debug:
++ start-stop-daemon --start --quiet --pidfile /var/run/urlsnarf.pid 
--exec /usr/sbin/urlsnarf -- -i br0 '>>' /var/log/urlsnarf.log

invece di tenermi >> mi scrive '>>'.
Ho provato ad anteporre \ al simbolo di maggiore senza risultato.
++ start-stop-daemon --start --quiet --pidfile /var/run/urlsnarf.pid 
--exec /usr/sbin/urlsnarf -- -i br0 '\>\>' /var/log/urlsnarf.log

Da notare che l'echo che ho messo di debug ritornerebbe una stringa 
apparentemente corretta senza ':
start-stop-daemon --start --quiet --pidfile /var/run/urlsnarf.pid --exec 
/usr/sbin/urlsnarf --  -i br0 \>\> /var/log/urlsnarf.log
(che poi non andrebbe bene causa backslash, ma non è questo il problema).

In quale labirinto della bash mi sono perso stavolta?
Purtroppo ricercare > (non riferito alla redirezione) e ' su google non 
è il massimo.

Ah, esiste qualche modo per fare in modo che il processo che lancio se 
per qualche motivo muore venga rilanciato in automatico? Il respawn lo 
conosco, ma se uso il respawn non riesco neanche più a terminarlo il 
processo. Vorrei che il solo modo per stoppare il processo fosse tramite 
/etc/init.d/script stop.
Se killato in altro modo ripartisse.

Samuele, che quasi quasi si mette in società col Vipera per fare una 
macchina del tempo a puntatori...


#!/bin/sh

# Quick start-stop-daemon example, derived from Debian /etc/init.d/ssh
set -e
set -x

# Must be a valid filename
NAME=urlsnarf
PIDFILE=/var/run/$NAME.pid
#This is the command to be run, give the full pathname
DAEMON=/usr/sbin/urlsnarf
DAEMON_OPTS=" -i br0 >> /var/log/urlsnarf.log"

export PATH="${PATH:+$PATH:}/usr/sbin:/sbin"

case "$1" in
   start)
         echo -n "Starting daemon: "$NAME
echo $DAEMON
echo $DAEMON_OPTS
echo "start-stop-daemon --start --quiet --pidfile $PIDFILE --exec 
$DAEMON -- $DAEMON_OPTS"

         start-stop-daemon --start --quiet --pidfile $PIDFILE --exec 
$DAEMON -- $DAEMON_OPTS
         echo "."
         ;;
   stop)
         echo -n "Stopping daemon: "$NAME
         start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
         echo "."
         ;;
   restart)
         echo -n "Restarting daemon: "$NAME
         start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile 
$PIDFILE
         start-stop-daemon --start --quiet --pidfile $PIDFILE --exec 
$DAEMON -- $DAEMON_OPTS
         echo "."
         ;;

   *)
         echo "Usage: "$1" {start|stop|restart}"
         exit 1
esac

exit 0



++ start-stop-daemon --start --quiet --pidfile /var/run/urlsnarf.pid 
--exec /usr/sbin/urlsnarf -- -i br0 '>>' /var/log/urlsnarf.log
urlsnarf: Libnids not initialized
root a srvlog:~# start-stop-daemon --start --quiet --pidfile 
/var/run/urlsnarf.pid --exec /usr/sbin/urlsnarf -- -i br0 '>>' 
/var/log/urlsnarf.log
urlsnarf: Libnids not initialized
root a srvlog:~# vi /etc/init.d/urlsnarf
root a srvlog:~# /etc/init.d/urlsnarf start
++ NAME=urlsnarf
++ PIDFILE=/var/run/urlsnarf.pid
++ DAEMON=/usr/sbin/urlsnarf
++ DAEMON_OPTS=' -i br0 \>\> /var/log/urlsnarf.log'
++ export 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/sbin:/sbin
++ 
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/sbin:/sbin
++ case "$1" in
++ echo -n 'Starting daemon: urlsnarf'
Starting daemon: urlsnarf++ echo /usr/sbin/urlsnarf
/usr/sbin/urlsnarf
++ echo -i br0 '\>\>' /var/log/urlsnarf.log
-i br0 \>\> /var/log/urlsnarf.log
++ echo 'start-stop-daemon --start --quiet --pidfile 
/var/run/urlsnarf.pid --exec /usr/sbin/urlsnarf --  -i br0 \>\> 
/var/log/urlsnarf.log'
start-stop-daemon --start --quiet --pidfile /var/run/urlsnarf.pid --exec 
/usr/sbin/urlsnarf --  -i br0 \>\> /var/log/urlsnarf.log
++ start-stop-daemon --start --quiet --pidfile /var/run/urlsnarf.pid 
--exec /usr/sbin/urlsnarf -- -i br0 '\>\>' /var/log/urlsnarf.log







More information about the montellug mailing list