bash script démonizálása

Készítettem egy pár soros scriptet, mely magában tökéletes. Viszont arra volna szükségem, hogy démonként fusson.
A script egyszerű:


#!/bin/bash
Uppp_path="/etc/sysconfig/network-scripts"
Uppp_config="ifcfg-ppp0"

Uppp_file="${Uppp_path}/${Uppp_config}"

if [ "$(pidof draknetcenter)" ]; then
sleep 10
if [ -f ${Uppp_file} ]; then
rm -f ${Uppp_file}
cp ${Uppp_path}/${Uppp_config}_backup ${Uppp_path}/${Uppp_config}
fi
fi

Erre sajnos azért van szükségem, mert a mobilnet minden esetben az ttyUSB0-n akar menni, és minden esetben újragenerálja az
/etc/sysconfig/network-scripts/ifcfg-ppp0 konfig fájlt a rossz modemport-tal. A jó amúgy a ttyUSB2.

Magát a netkapcsolatot a draknetcenter segítségével tudom elindítani. Ekkor generálja nekem az új konfig fájlt, amit én szépen szeretnék automatikusan felülírni. A script ezt már megoldja, de nem tudom hogy fusson a háttérben mindig.
Ha az /etc/rc.d/init.d/-be teszem és symlinkelem az 5-ös initbe az elég?

Hozzászólások

Ez a script így összesen egyszer fog lefutni.

A helyedben az egészet betenném egy végtelen ciklusba, megfelelő sleep értékkel, hogy ne folyamatosan fusson. Így ha elindítod az init.d-vel akkor folyamatosan fut amíg ki nem kapcsolod a gépet.

Egyébként a cron-t pont ilyenekre találták ki.
ttp://wiki.hup.hu/index.php/Cron

incron. olyan mint a cron, de csak egy figyelt mappa tartalmának változásakor fog lefutni (inotify kernel esemény alapján), és nem kell boot-kor indítani így a script-ed.

nem találom a manualban a példa incrontab fájlt, ezért beírom, kb ez:

install incron

incrontab -e

/etc/sysconfig/network-scripts/ IN_CLOSE_WRITE /root/script.sh "$@/$#"

a script megkapja paraméterként a megváltozott fájl nevét teljes elérési úttal.

Ha így indítod mindig futni fog.


#!/bin/bash
Uppp_path="/etc/sysconfig/network-scripts"
Uppp_config="ifcfg-ppp0"

Uppp_file="${Uppp_path}/${Uppp_config}"

while true; do
  if [ "$(pidof draknetcenter)" ]; then
    sleep 10
    if [ -f ${Uppp_file} ]; then
      rm -f ${Uppp_file}
      cp ${Uppp_path}/${Uppp_config}_backup ${Uppp_path}/${Uppp_config}
    fi
  fi
done

--
falura elmegy, városban meg úgy sem nézik...

http://mmonit.com/monit/
ha eltekintesz a logika scriptben megvalositasatol, akkor monittal figyelheted a konfigfile valtozast, ujraindithatod a processzt, stb...

Ne má! Nem hiszem, hogy ilyen randán kell megoldani. Readonly? Wvdial?

Ez a fájl nem olyan hogy csak olvasható. De ha arra teszem, akkor is felülírja. Már próbáltam.
A wvdial-t meg a hátam, közepére kívánom.
Próbálkoztam vele, de soha nem tudtam neki megmondani hogy az eszköz a ttyUSB2-n van. Csak serial porttal volt hajlandó működni. Ne kérdezd miért.
A rendszer felismeri a sticket, még az usb_modeswitch sem kell neki. Mindössze annyi a baja hogy a legenerált ifcg-ppp0 fájlban a ttyUSB0-ra hivatkozik.
Az /usr/lib/libDrakX/network/connection/cellurar_card.pm-ben lehetne turkálni, de az nekem kicsit kínai, és tudnom kellene hogy melyik változó éppen mit takar.

Részlet:

sub get_control_device {
my ($self) = @_;
my $tty_device = $self->get_tty_device;
if ($tty_device eq "/dev/ttyUSB0") {
for my $id (2, 1) {
my $usb_control_device = "/dev/ttyUSB" . $id;
return $usb_control_device if -e $usb_control_device;
}
}
$tty_device;
}

Ha meg itt átírom ttyUSB2-re és kikommentezem a for my $id sort, akkor meg le sem generálja a konfig fájlt.
De most azért kipróbálom úgy hogy /dev/modem-et írok ide.

Igazából a probléma ott van, hogy nevesítik a ttyUSB0-t. Ha az lenne benne hogy modemport=modem, akkor sima ügy lenne, mert készítenék a dev-be egy symlinket.

Érdemes a wvdial-al probálkozni mert elég megbízhatónak tapasztaltam. Nekem ez van:

[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Stupid Mode = 1
Modem Type = Analog Modem
ISDN = 0
Phone = *99#
Modem = /dev/ttyUSB0
Username = pannon
Password = pannon
Dial Command = ATDT
Baud = 9600