Script möglichst früh beim Systemstart starten

Überkinger

Lieutenant
Registriert
Juli 2010
Beiträge
600
Hallo,

ich möchte ein Script möglichst früh im System starten, möglichst bevor Mailserver und Postfix laufen.

/etc/rc.local startet ja erst nachdem die Systemdienste, also auch Postix / Mailserver gestartet sind. Wie gehe ich am besten vor um möglichst früh das Script auszuführen? OS ist CentOS 6.3.
 
Was möchtest du denn starten?

Geht eigentlich über CHKCONFIG bzw. über die Runlevel unter /etc/rc*.d/{S|K}??<name>
 
Sannyboy111985 schrieb:
Was möchtest du denn starten?
Geht eigentlich über CHKCONFIG bzw. über die Runlevel unter /etc/rc*.d/{S|K}??<name>

Mein Plan:

Postfix-Queue auf tmpfs legen für temp. Mailversand an Kunden (sie haben einen Echtzeitnewsletter gekauft und bezahlt)

Rahmenbedingungen:

- virtuelle Maschine via OpenVZ
- wird nur für den Versand verwendet
- kein eingehenden Mails
- kein Webserver etc.

Grund:

Geringe Geschwindigkeit bei Mailversand an ca. 5500 Kunden von etwa 2 Mails/Sekunde. Der letzte Kunde erhält die Mail gut ne dreiviertel Stunde später als der erste Kunde. Ich habe bereits das Amavis TEMPDIR in die Ramdisk gelegt und dies hat auch einiges gebracht. Manuell habe ich auch den Postfix-Queue schon in die Ramdisk gebracht. Das gab erst die erwartete Geschwindigkeit von 8-12 Mails/Sekunde.

Bevor Postfix startet brauche ich ein

cp -a /var/spool/postfix/* /mnt/rdisk/postfix/

damit Postfix korrekt arbeitet. Mein erster Ansatz war rc.local, aber die startet nach Postfix
 
Ohne mich jetzt mit CentOS auszukennen, hilft es vielleicht ein Skript zu schreiben und dieses dann mit einem Runlevel (gibt es die bei CentOS?) zu verknüpfen? Also z.b. während des bootens, z.b.?

/etc/rc.local wird erst am Schluss abgearbeitet, deswegen wird es für dich nicht funktionieren.
 
Zedar schrieb:
Ohne mich jetzt mit CentOS auszukennen, hilft es vielleicht ein Skript zu schreiben und dieses dann mit einem Runlevel (gibt es die bei CentOS?) zu verknüpfen? Also z.b. während des bootens, z.b.?

/etc/rc.local wird erst am Schluss abgearbeitet, deswegen wird es für dich nicht funktionieren.

An so etwas hatte ich auch gedacht. Leider weiß ich nicht wie das init-System von CentOS funktioniert. Bei google habe ich aber folgendes gefunden: http://stackoverflow.com/questions/3164634/centos-init-scripts-dependecies. Man müsste somit ein eigenes Skript mit hoher Priorität früh beim Bootvorgang ausführen können.
 
schattenhueter schrieb:
An so etwas hatte ich auch gedacht. Leider weiß ich nicht wie das init-System von CentOS funktioniert. Bei google habe ich aber folgendes gefunden: http://stackoverflow.com/questions/3164634/centos-init-scripts-dependecies. Man müsste somit ein eigenes Skript mit hoher Priorität früh beim Bootvorgang ausführen können.

Hallo,

ich bin jetzt soweit, dass ich im PostfixInitscript /etc/init.d/postfix folgende Änderung vorgenommen habe:

Code:
start() {
        [ "$EUID" != "0" ] && exit 4
        # Check that networking is up.
        [ ${NETWORKING} = "no" ] && exit 1
        conf_check
        # Start daemons.
*       echo "Starte Postfix Sync now to RDD..."
*       rsync -av --delete /var/spool/postfix/ /mnt/rdisk/postfix/
*       sleep 5
        echo -n $"Starting postfix: "
        make_aliasesdb >/dev/null 2>&1
        [ -x $CHROOT_UPDATE ] && $CHROOT_UPDATE
        /usr/sbin/postfix start 2>/dev/null 1>&2 && success || failure $"$prog start"
        RETVAL=$?
        [ $RETVAL -eq 0 ] && touch $lockfile
        echo
        return $RETVAL
}

Eigene Zeile sind mit * markiert (nicht im Script)

Damit wird der gesamte Spool-Ordner erfolgreich in die Ramdisk synchronisiert. Postifx arbeitet damit auch bei einem Neustart korrekt.


Code:
stop() {
        [ "$EUID" != "0" ] && exit 4
        conf_check
        # Stop daemons.
        echo -n $"Shutting down postfix: "
        /usr/sbin/postfix stop 2>/dev/null 1>&2 && success || failure $"$prog stop"
        sleep 5
        RETVAL=$?
        [ $RETVAL -eq 0 ] && rm -f $lockfile $pidfile
        rsync -av --delete /mnt/rdisk/postfix/ /var/spool/postfix/
        echo "Start Postfix Sync back to HDD..."
        sleep 5
        echo
        return $RETVAL
}

Problem: Das Resync auf auf de HDD drin, das funktioniert aber wirklich nur, wenn ich den Dienst stope. Bei einem Systemstart wird stop anscheinend nicht ausgeführt.

Ne, Idee. Wo Postfix beim Systemneuestart den Dienst beendet, wenn nicht über die init.d/postfix?
 
Zuletzt bearbeitet:
Deine Problembeschreibung verstehe ich leider nicht so ganz. Willst du beim Herunterfahren auch noch rsync ausführen, damit die Daten aus der Ramdisk nicht verloren gehen?
Ich hatte mit google etwas ähnliches gefunden (https://www.linuxquestions.org/questions/linux-general-1/init-d-script-not-executing-at-shutdown-and-reboot-793154/), aber dort fehlte einfach das touch $lockfile, was bei dir ausgeführt wird. Aber vielleicht fehlen ja noch Einträge in den rcX.d Ordnern. rc0.d müsste shutdown und rc6.d müsste reboot sein.
 
Zuletzt bearbeitet:
Zurück
Oben