Autostart für Asterisk

/etc/inittab editieren und folgendes hinzufügen:
ax:2345:respawn:/usr/sbin/asterisk -vvvcf

Das ist eine gute Idee, man sollte nur bedenken, dass sich der asterisk dann nicht mehr so leicht stoppen lässt - Die Zeile in der inittab wegkommentieren und
Code:
init q
ausführen.
 
Hast Du auch den Link in den Runlevel gesetzt - sonst wird dort gar nichts gestartet werden.

Link in den Runlevel? Also wenn ich eingeben /etc/init.d/meinscript enable , dann sehe ich, dass es einen symbolischen Link /etc/rc.d/S51meinscrip gibt. Gebe ich /etc/init.d/meinscript disable ein, dann verschwindet der symbolische Link wieder. Ich schätze mal, dass du das mit "Link in den Runlevel" meinst.

Wie gesagt, mein Script startet ja alle darin enthaltene Programme, nur Asterisk nicht.

Die Zeile "ax:2345:respawn:/usr/sbin/asterisk -vvvcf" habe ich übrigens zu /etc/inittab auch hinzugefügt, aber auch das blieb erfolglos.

Wenn in "init q" eingebe, dann kommt nur
Code:
root@OpenWrt:~# init q
BusyBox v1.4.2 (2007-09-29 09:01:24 CEST) multi-call binary

Usage: init

Init is the parent of all processes
 
Wie gesagt, mein Script startet ja alle darin enthaltene Programme, nur Asterisk nicht.

Die Zeile "ax:2345:respawn:/usr/sbin/asterisk -vvvcf" habe ich übrigens zu /etc/inittab auch hinzugefügt, aber auch das blieb erfolglos.

Wenn in "init q" eingebe, dann kommt nur
Code:
root@OpenWrt:~# init q
BusyBox v1.4.2 (2007-09-29 09:01:24 CEST) multi-call binary

Usage: init

Init is the parent of all processes

Ich glaube, dass OpenWRT etwas anders gestrickt ist, z.B. kennt es m.E keine Runlevels - alle Scripts in /etc/init.d werden beim booten ausgeführt. Und ich denke auch, dass "init q" unter diesem OS nicht den init Prozess resettet. Probier mal einen Reboot, weil der inittab Trick sollte funktionieren. Ich halte ausserdem folgendes für möglich:

* m.E. schickt OpenWRT kein start oder stop attribut sondern ruft einfach die Scripte auf
* Versuche das Sript möglichst spät zu starten - /etc/init.d/S99asterisk
 
Hier gibt es nur /etc/init.d/ mit Scripts darin und /etc/rc.d/ und darin symbolische Links zu Dateien in /etc/init.d

Im poste mal meine /etc/init.d/asterisk
Code:
#!/bin/sh /etc/rc.common
# Copyright (C) 2006 OpenWrt.org
START=99 

DEST=/mnt/usb/
DEFAULT=$DEST/etc/default/asterisk
OPTIONS=""

start() {
	[ -f $DEFAULT ] && . $DEFAULT
	[ -d $DEST/var/run ] || mkdir -p $DEST/var/run
	[ -d $DEST/var/log/asterisk ] || mkdir -p $DEST/var/log/asterisk
	[ -d $DEST/var/spool/asterisk ] || mkdir -p $DEST/var/spool/asterisk
        [ -d /var/spool/asterisk ] || mkdir -p /var/spool/asterisk
        [ -h $DEST/usr/lib/asterisk/astdb ] || ln -sf /var/spool/asterisk/astdb $DEST/usr/lib/asterisk/astdb
	$DEST/usr/sbin/asterisk $OPTIONS
}

stop() {
	[ -f $DEST/var/run/asterisk.pid ] && kill $(cat $DEST/var/run/asterisk.pid) >/dev/null 2>&1
}

Der symbolische Link, der auf diese Datei zeigt ist /etc/rc.d/S99asterisk

Mit /etc/init.d/asterisk start kann ich Asterisk problemlos von der Shell aus starten, nur automatisch geschieht das nicht (unabhängig davon ob ich die Zeile "ax:2345:respawn:/usr/sbin/asterisk -vvvcf" zu inittab hinzufüge oder nicht).
 
Mach mal ein Script /etc/init.d/S99asterisk , wo schlicht drinnen steht:
Code:
/usr/sbin/asterisk -vvv

- falls sich asterisk dort befindet.

Ich bin ziemlich zuversichtlich, dass das pfeift.
 
Ne, leider nicht :-(

Ich hätte nie gedacht, dass es so ein Problem ist, dass Asterisk automatisch neustartet.
Bei jedem anderen Programm geht der automatische Neustart auch, warum bei Asterisk nicht???
 
Schreib das Script so:
Code:
/etc/init.d/asterisk -vvv 2>/tmp/error.txt

Eventuell auch mit Kanal 1 - vielleicht will uns der Stern ja etwas sagen.
 
Na sieh mal einer an, was im error.txt drin steht: /mnt/usb/usr/sbin/asterisk: can't load library 'libpthread.so.0'

Die Sache ist ja die: Der ASUS-Router hat nur 4MB flash, also habe ich da noch einen 32MB-USB-Stick rein getan. Die ganze Treiber für die USB-Sache habe ich normal in der JFFS-Partition installiert, aber die restlichen IPKGs (Asterisk, libncurses, libpthread) wurden auf dem USB-Stick diese Anleitung befolgend installiert.

In der besagten Anleitung steht, dass man ein paar Pfade anpassen soll, damit das System weiß, dass libpthread.so.0 nicht da liegt, wo es normalerweise liegt, sondern auf dem USB-Stick. Das habe ich eigentlich auch getan. Na gut, ich versuche es mal mit der Quick&dirty-Lösung: ich installiere libpthread und libncurses normal in der jffs-Partition.

Danke für die Hilfe. Ich berichte von meinem Erfolg/Misserfolg.

Nachtrag: Es lag nur daran, dass der Asterisk beim Start die libpthread.so.0 auf der jffs-Partiton gesucht hat. Aber ich habe die package ja auf dem USB-Stick installiert. Ich schätze mal, dass der Asterisk beim Start noch nicht weiß, dass die Datei auf dem USB-Stick liegt. Bestimmt kann man das dem irgendwie sagen, aber mir schien es leichter, die zwei Packages vom USB-Stick zu entfernen und die auf der jffs-Partition zu installieren. Jetzt läuft alles. Es reicht einfach die oben genannte Datei /etc/init.d/asterisk

Danke nochmal für die Hilfe :)
 
Zuletzt bearbeitet:
Na sieh mal einer an, was im error.txt drin steht: /mnt/usb/usr/sbin/asterisk: can't load library 'libpthread.so.0'

Du kannst ja entweder einen symbolischen Link setzen oder im Script eine Pfadvariable setzen.
 
Hallo,

komischerweise habe ich (mittlerweile) auch Probleme beim automatischen Starten von Asterisk auf einem VServer von Star Hosting. Verwendet wird Betateilchen´s Mini-Skript http://www.ip-phone-forum.de/showpost.php?p=522745&postcount=242, welches auch früher (z.B.) vor dem Umzug der VServer bei Star Hosting wunderbar funktioniert hat. Neueste (stable) Version von Asterisk ist installiert, aber in den letzten Tagen bootet Star Hosting entweder täglich die Server (Support sagt zwar nein) oder Asterisk schmiert täglich ab.

Summa summarum führt das Skript leider bei mir (nicht mehr) dazu, dass Asterisk beim Booten automatisch mitgeladen wird.

Gruss Guido
 
In dem Zusammenhang möchte ich auch was beitragen.
Wem das ganze, mit den runleveln und den passenden links auf die scripte, etwas zu viel ist, der möge sich mal "filerc" oder "file-rc" ansehen. (Name je nach distribution)
Nach der Installation werden alle rcX Verzeichnisse gelöscht (mit backup), und anstelle
dessen eine /etc/runlevel.conf datei angelegt.
In dieser steht dann schön übersichtlich, was gemacht werden soll.
Man kann anhand des Aufbaus der Datei sehr schön ersehen:
-welches script (/etc/init.d/NAME)
-wie (start/stop)
-welcher runlevel (S,1,2...)
-mit welcher priorität (1-99)
behandelt wird.
Quasi wie eine autoexec.bat, wenn der Vergleich erlaubt ist.
Für mich eines der Dinge die auf keinem System fehlen sollte.
 
Hi,

(Teil-)Lösung zu meinem oben geschilderten Problem: Server läuft im Runlevel 3, d.h. Skript leicht anpassen und es funktioniert. Warum Star-Hosting öfters bootet und/oder Asterisk abschmiert und/oder früher rc2 bei Star-Hosting verwendet wurde habe ich nicht weiter angeschaut.

Viele Grüsse, Guido
 
Leider kriege ich das mit dem respawn auf meinem Starhosting-vserver nicht hin.

Ich habe versucht die Zeile "x:2:respawn:/usr/sbin/asterisk -f" unten oben und in der Mitte der /etc/inittab zu setzen und das Gleiche habe ich auch mit der Zeile "ax:2345:respawn:/usr/sbin/asterisk -vvvcf" versucht.
Asterisk wird beim Neustart des V-Servers nicht mitgestartet und auch wenn ich es manuell starte und dann in der CLI "stop now" eingebe, wird * nicht wieder gestartet. Was mache ich falsch?
 
Du weisst ja nicht, ob der asterisk einfach nicht gestartet wird oder ob er nicht anspringt. Wenn alle anderen Dienste gestartet werden, wird ja Dein Linux keine Ausnahme machen und sich es sich beim asterisk anders überlegen.

Deshalb wieder hier mein Rat von weiter oben - SINNGEMÄSS - dann weiter oben hatten wir es mit OpenWRT zu tun:

Code:
/usr/bin/asterisk -vvv 2>/tmp/error.txt
 
So sieht meine /etc/inittab aus:
Code:
# /etc/inittab: init(8) configuration.

# The default runlevel.
id:2:initdefault:

# Boot-time system configuration/initialization script.
# This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS

# What to do in single-user mode.
~~:S:wait:/sbin/sulogin

# /etc/init.d executes the S and K scripts upon change
# of runlevel.
#
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.

l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6

x:2:respawn:/usr/bin/asterisk -vvv 2>/tmp/error.txt
Aber Asterisk wird nicht gestartet und auch eine /tmp/error.txt wird nicht erstellt :-(

Ich habe das Problem zwar einigermaßen gelöst in dem ich "crontab -e" eingegeben habe und dort dann die Zeile
Code:
*/1 * * * *    if [ ! -f /var/run/asterisk.pid ]; then /usr/sbin/asterisk; fi
hinzugefügt habe.
Aber ich würde das schon gerne mit respawn hinbekommen. Ich wüsste zu gerne, was ich falsch mache :-(
 
Ich halte die inittab Methode sowieso nicht für optimal, weil - wenn es mal funktioniert ;-) - ist es kompliziert, den asterisk wieder runterzufahren. Deshalb finde ich die Standardskripte in /etc/init.d besser. Das gleiche gilt für einen Eintrag im crontab.

Die Vorgangsweise ist einfach:

* Ein Script in /etc/init.d, das die Argumente start und stop akzeptiert und dessen Funktionalität sichergestellt ist
* Einen symbolischen Link im entsprechenden Runlevel namens z.B S90asterisk, das auf das Startskript zeigt
* Sollte asterisk nicht anspringen, trage man zu beginn des Scripts "/bin/touch /tmp/asterisk.ok" ein. Nach einem Boot sollte diese Datei mit der Grösse 0 dort stehen. Tut sie das nicht, hat man weiter oben etwas falsch gemacht, zurück an den Start.
* Existiert diese Datei und der * läuft nicht, springt er nich an. Es sind die Logfiles zu untersuchen und gegebenenfalls der Trick mit dem Umlenken des Errorkanals in eine Datei anzuwenden.

Mehr gibts dazu eigentlich nicht zu sagen...
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.