Prozesspriorität dauerhaft eisntellen

Mysterious

Neuer User
Mitglied seit
3 Nov 2005
Beiträge
158
Punkte für Reaktionen
0
Punkte
16
Hi,

ich habe hier ein Asterisk System unter XEN am laufen. Leider ist es so das es zu Aussetzern beim Gesprächspartner kommt wenn ich den Asterisk Prozess nicht nachträglich höher priorisiere.

Mit renice geht das ja wunderbar aber wie kann ich das dauerhaft eintragen, so das wenn der Asterisk beim Systemstart startet automatisch die Priorität auf sagen wir -10 gesetzt wird. Was pasiert bei einem Crash und automatischen Reload?

MFG

Mysterious
 
Such mal nach der Datei safe_asterisk und innerhalb dessen nach dem Eintrag:

Code:
PRIORITY=0


Ich denke der könnte vielleicht helfen?

Gruß

Martin


[EDIT]
Sorry, dies läuft wahrscheinlich nur, wenn Du mit Start-Stop Scripten arbeitest...
 
Hallo,
das sollte im Prinzip funktionieren, wenn du den Asterisk-Server nicht mit "asterisk" sondern mit "nice -n -10 asterisk" startest.
Stelle dazu einfach das "nice -n -10" vor die Zeile deines Start-Skripts, in dem du den Asterisk starten lässt.
 
OK, aber wo bau ich das im Startscript ein?

Hier mal mein Asterisk Start Script :

Code:
#! /bin/sh
# $Id: rc.debian.asterisk 67061 2007-06-04 17:11:43Z tilghman $
#
# asterisk      start the asterisk PBX
#
# Thu Nov 17 2005 Gregory Boehnlein <[email protected]>
# - Updated Version to 1.3
# - Reversed behavior of LD_ASSUME_KERNEL=2.4.1
# - Added detailed failure messages
#
# Sun Jul 18 2004 Gregory Boehnlein <[email protected]>
# - Updated Version to 1.2
# - Added test for safe_asterisk
# - Changed "stop gracefully" to "stop now"
# - Added support for -U and -G command line options
# - Modified "reload" to call asterisk -rx 'reload'

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=asterisk
DESC="Asterisk PBX"
# Full path to asterisk binary
DAEMON=/usr/sbin/asterisk

# Full path to safe_asterisk script
SAFE_ASTERISK=/usr/sbin/safe_asterisk

# Uncomment this ONLY if you know what you are doing.
# export LD_ASSUME_KERNEL=2.4.1

# Uncomment the following and set them to the user/groups that you
# want to run Asterisk as. NOTE: this requires substantial work to
# be sure that Asterisk's environment has permission to write the
# files required  for  its  operation, including logs, its comm
# socket, the asterisk database, etc.
#AST_USER="asterisk"
#AST_GROUP="asterisk"

if ! [ -x $DAEMON ] ; then
        echo "ERROR: /usr/sbin/asterisk not found"
        exit 0
fi

if ! [ -d /etc/asterisk ] ; then
        echo "ERROR: /etc/asterisk directory not found"
        exit 0
fi

set -e

case "$1" in
  start)
        echo -n "Starting $DESC: "
        if [ -f $SAFE_ASTERISK ] ; then
                DAEMON=$SAFE_ASTERISK
        fi
        if [ $AST_USER ] ; then
                ASTARGS="-U $AST_USER"
        fi
        if [ $AST_GROUP ] ; then
               ASTARGS="`echo $ASTARGS` -G $AST_GROUP"
        fi
        start-stop-daemon --start --exec $DAEMON -- $ASTARGS
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        $DAEMON -rx 'stop now' > /dev/null 2> /dev/null && echo -n "$NAME"
        echo "."
        exit 0
        ;;
  reload)
        echo "Reloading $DESC configuration files."
        $DAEMON -rx 'reload' > /dev/null 2> /dev/null
        ;;
  restart|force-reload)
        $DAEMON -rx 'restart gracefully' > /dev/null 2> /dev/null && echo -n "$NAME"
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
        exit 1
        ;;
esac

exit 0
 
Hallo,
versuche mal die Zeile

start-stop-daemon --start --exec $DAEMON -- $ASTARGS

in

nice -n -10 $DAEMON $ASTARGS

abzuändern.
Anschließend sollte der Asterisk dann in der Ausgabeliste von "ps ax" so ähnlich wie hier drinstehen:
22611 ? S<sl 1:26 /usr/sbin/asterisk -p -q
 
Okay, das klappt schon mal. Danke für den TIP hab es jetzt aber so gemacht das ich weiterhin den "start-stop-deamon" verwende und nun das ganze folgendermaßen aufrufe:

NEUE Variable deklarieren in der global Section:

#Priorität des Asterisk Prozesses (-19 höchste, +19 kleinste)
PRIORITY=-10

und das Start Script um folgenden Parameter erweitern das es so aussieht:

start-stop-daemon --nicelevel $PRIORITY --start --exec $DAEMON -- $ASTARGS


Grüße Mysterious
 
Hallo,
das mit dem start-stop-daemon Befehl ist sicherlich der elegantere Weg, ganz nach Debian-Standard. Mir als nicht-Debian-Nutzer ist dieser Befehl (und daher auch das Argument nicelevel) einfach nicht vertraut gewesen. :)
Aber schön zu hören, dass es jetzt wie gewünscht funktioniert, dann sind wir ja nun alle wieder ein klein wenig schlauer.
 
Naja, ich kannte diesen Daemon ehrlich gesagt vorher auch net.:-) Aber nach deinem Tip hab i mal bissl das Manual dieses Programms gelesen. Er ist dazu da um zu verhindern das z.B. eine 2te Instanz des Deamons gestartet wird wenn noch eine läuft oder um beim beenden des Prozesses sicherzugehen das er auch wirklich beendet ist.
Also ein Tool zur Prozessüberwachung und Kontrolle.

Genaueres findet sich bei Debian unter
Code:
man start-stop-daemon
;-)

Wie ist es bei anderen Distributionen gelöst? Gibts da was vergleichbares?
 
n'Abend,
für SuSE gibt es da sicherlich auch irgendwelche Pendants dazu, wenn ich mich richtig erinnere "startproc", "checkproc", "killproc", und bestimmt noch ein paar andere.
Ich hab mir mein Startscript aber einfach ganz simpel wie folgt zusammengebaut, und es erfüllt seinen Sinn. ;)
Code:
#!/bin/bash
case "$1" in
    start)
        echo -n "Starting asterisk "
        nice -n -10 /usr/sbin/asterisk -p -q #-U asterisk -G asterisk
        ;;
    stop)
        echo -n "Shutting down asterisk "
        /usr/sbin/asterisk -r -x "stop now"
        ;;
    restart)
        $0 stop
        $0 start
        ;;
    *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
        ;;
esac
Ich weiß, dass das Script seine Schwächen hat, aber getreu dem Motto "keep it simple" und "ich weiß was ich tue wenn ich als root /etc/init.d/asterisk aufrufe". :p
Und bevor die ersten Aufschreie kommen, warum ich Asterisk als Root ausführe: Mit User-Rechten ist es mir leider nicht möglich, die RTP-Pakete mit dem TOS-Bit 0xB8 (=EF) zu markieren. Dies benötige ich aber unbedingt, damit meine Firewall die Pakete anschießend auch in der PFIFO-Queue für den ADSL-Upstream immer an erste Stelle schieben kann. Falls hier allerdings jemand Verbesserungsvorschläge hat, ich lerne gerne dazu. :)
 
dfroe schrieb:
Mit User-Rechten ist es mir leider nicht möglich, die RTP-Pakete mit dem TOS-Bit 0xB8 (=EF) zu markieren. Dies benötige ich aber unbedingt, damit meine Firewall die Pakete anschießend auch in der PFIFO-Queue für den ADSL-Upstream immer an erste Stelle schieben kann. Falls hier allerdings jemand Verbesserungsvorschläge hat, ich lerne gerne dazu. :)

das macht man besser mit iptables in der mangle table.

Startscriptvorlagen gibt es auch in /usr/src/asterisk/contrib/init.d/
 
Kostenlos!

Statistik des Forums

Themen
248,528
Beiträge
2,293,639
Mitglieder
378,033
Neuestes Mitglied
skyeball