OnWorks Linux- und Windows-Online-WorkStations

Logo

Kostenloses Online-Hosting für WorkStations

<Zurück | Inhalte | Weiter>

D.1. /etc/rc.d/init.d/rc

Die rc script ist das erste Skript, das von init aufgerufen wird und den Bootvorgang einleitet.

Image

#! / Bin / bash

################################################ ######################

# Beginnen Sie mit rc

#

# Beschreibung: Haupt-Run-Level-Control-Skript

#

# Autoren: Gerard Beekmans - [E-Mail geschützt]

# : DJ Lucas - [E-Mail geschützt]

# Update: Bruce Dubbs - [E-Mail geschützt]

#

# Version: LFS 7.0

#

################################################ ######################

. /lib/lsb/init-functions print_error_msg()

{

log_failure_msg

# $i wird beim Aufruf gesetzt

MSG="FEHLER:\n\nSie sollten diese Fehlermeldung nicht lesen.\n\n" MSG="${MSG}Dies bedeutet, dass ein unvorhergesehener Fehler aufgetreten ist in\n" MSG="${MSG}${i},\n"

MSG="${MSG}, das mit einem Rückgabewert von ${error_value} beendet wurde.\n"


MSG="${MSG}Wenn Sie diesen Fehler auf einen Fehler in einer der\n" MSG="${MSG}Dateien zurückführen können, die im Buch ${DISTRO_MINI} enthalten sind,\n" MSG="${MSG}seien Sie bitte so freundlich, uns unter ${DISTRO_CONTACT} zu informieren.\n" log_failure_msg "${MSG}"


log_info_msg „Drücken Sie die Eingabetaste, um fortzufahren …“ wait_for_user

}


check_script_status()

{

# $i wird beim Aufruf gesetzt if [ ! -f ${i} ]; dann

log_warning_msg "${i} ist kein gültiger symbolischer Link." SCRIPT_STAT="1"

fi


wenn [ ! -x ${i} ]; dann

Image


log_warning_msg "${i} ist nicht ausführbar, wird übersprungen." SCRIPT_STAT="1"

fi

}


Lauf()

{

wenn [ -z $interaktiv ]; dann

${1} ${2}

$ zurückgeben?

fi


während wahr; tun

read -p "${1} ${2} ausführen (Ja/Nein/Fortsetzen)?" -n 1 runit echo


Fall ${runit} in c | C)

interaktiv=""

${i} ${2}

ret=${?} Pause;

;;


n | N)

0 zurückgeben

;;


y | Y)

${i} ${2}

ret=${?} Pause

;;

esac fertig


return $ret

}


# Alle lokalen Einstellungen/Überschreibungen lesen

[ -r /etc/sysconfig/rc.site ] && Quelle /etc/sysconfig/rc.site


DISTRO=${DISTRO:-"Linux From Scratch"}

DISTRO_CONTACT=${DISTRO_CONTACT:-"[E-Mail geschützt] (Registrierung erforderlich)"} DISTRO_MINI=${DISTRO_MINI:-"LFS"}

IPROMPT=${IPROMPT:-"no"}


# Diese 3 Signale führen nicht dazu, dass unser Skript die Trap "" INT QUIT TSTP beendet


[ "${1}" != "" ] && Runlevel=${1}


wenn [ "${runlevel}" == "" ]; dann echo "Verwendung: ${0} " >&2 Ausgang 1

fi

Image


vorherige=${PREVLEVEL}

[ "${vorherige}" == "" ] && vorherige=N


wenn [ ! -d /etc/rc.d/rc${runlevel}.d ]; dann

log_info_msg "/etc/rc.d/rc${runlevel}.d existiert nicht.\n" Ausgang 1

fi


wenn [ "$runlevel" == "6" -o "$runlevel" == "0" ]; dann IPROMPT="nein"; fi


# Hinweis: In ${LOGLEVEL:-7} ist es ':' 'Strich' '7', nicht minus 7, wenn [ "$runlevel" == "S" ]; dann

[ -r /etc/sysconfig/console ] && Quelle /etc/sysconfig/console dmesg -n "${LOGLEVEL:-7}"

fi


wenn [ "${IPROMPT}" == "yes" -a "${runlevel}" == "S" ]; dann

# Die Gesamtlänge der Begrüßungszeichenfolge der Distribution ohne Escape-Codes wlen=${wlen:-$(echo "Willkommen bei ${DISTRO}" | wc -c )} welcome_message=${welcome_message:-"Willkommen bei ${INFO}${DISTRO}${NORMAL}"}


# Die Gesamtlänge der interaktiven Zeichenfolge ohne Escape-Codes ilen=${ilen:-$(echo "Press 'I' to enter interactive startup" | wc -c )}

i_message=${i_message:-"Drücken Sie '${FAILURE}I${NORMAL}', um den interaktiven Startvorgang zu starten"}


# dcol und icol sind Leerzeichen vor der Nachricht, um die Nachricht zu zentrieren

# auf dem Bildschirm. itime ist die Wartezeit, die der Benutzer benötigt, um eine Taste zu drücken. wcol=$(( ( ${COLUMNS} - ${wlen} ) / 2 ))

icol=$(( ( ${COLUMNS} - ${ilen} ) / 2 )) itime=${itime:-"3"}


echo -e "\n\n"

echo -e "\\033[${wcol}G${Willkommensnachricht}" echo -e "\\033[${icol}G${i_message}${NORMAL}" echo ""

lesen -t "${itime}" -n 1 interaktiv 2>&1 > /dev/null

fi


# Kleinbuchstaben machen

[ "${interactive}" == "I" ] && interactive="i" [ "${interactive}" != "i" ] && interactive=""


# Lesen Sie die Statusdatei, falls vorhanden, ab Runlevel S

[ -r /var/run/interactive ] && Quelle /var/run/interactive


# Versuchen Sie, alle vom vorherigen Runlevel gestarteten Dienste zu stoppen.

# und in diesem Runlevel getötet

wenn [ "${previous}" != "N" ]; dann

für i in $(ls -v /etc/rc.d/rc${runlevel}.d/K* 2> /dev/null) mache

check_script_status

wenn [ "${SCRIPT_STAT}" == "1" ]; dann SCRIPT_STAT="0"

fortsetzen

fi

Image


suffix=${i#/etc/rc.d/rc$runlevel.d/K[0-9][0-9]} prev_start=/etc/rc.d/rc$previous.d/S[0-9][0-9]$suffix sysinit_start=/etc/rc.d/rcS.d/S[0-9][0-9]$suffix


wenn [ "${runlevel}" != "0" -a "${runlevel}" != "6" ]; dann

if [ ! -f ${prev_start} -a ! -f ${sysinit_start} ]; then MSG="WARNUNG:\n\n${i} kann nicht sein "

MSG="${MSG}ausgeführt, da es nicht " MSG="${MSG}im vorherigen " MSG="${MSG}Runlevel (${previous}) nicht gestartet wurde." log_warning_msg "$MSG"

fortsetzen

fi

fi


ausführen ${i} stoppen error_value=${?}


wenn [ "${error_value}" != "0" ]; dann print_error_msg; fi fertig

fi


wenn [ "${previous}" == "N" ]; dann exportiere IN_BOOT=1; fi


wenn ["$runlevel" == "6" -a -n "${FASTBOOT}" ]; dann touch /fastboot

fi


# Alle Funktionen in diesem Runlevel starten

für i in $( ls -v /etc/rc.d/rc${runlevel}.d/S* 2> /dev/null) mache

wenn [ "${previous}" != "N" ]; dann Suffix=${i#/etc/rc.d/rc$runlevel.d/S[0-9][0-9]} Stopp=/etc/rc.d/rc$runlevel.d/K[0-9][0-9]$suffix vorheriger_Start=/etc/rc.d/rc$previous.d/S[0-9][0-9]$suffix


[ -f ${prev_start} -a ! -f ${stop} ] && weiter

fi


check_script_status

wenn [ "${SCRIPT_STAT}" == "1" ]; dann SCRIPT_STAT="0"

fortsetzen

fi


Fall ${runlevel} in 0|6)

lauf ${i} stopp

;;

*)


esac


führen Sie ${i} start aus

;;


error_value=${?}



wenn [ "${error_value}" != "0" ]; dann print_error_msg; fi fertig


# Interaktive Variable beim Wechsel von Runlevel S speichern und entfernen, wenn nicht, wenn [ "${runlevel}" == "S" -a "${interactive}" == "i" ]; dann

echo "interaktiv="i"" > /var/run/interaktiv

sonst

rm -f /var/run/interactive 2> /dev/null

fi


# Kopieren Sie das Boot-Protokoll nur beim ersten Booten

wenn [ "${previous}" == "N" -a "${runlevel}" != "S" ]; dann cat $BOOTLOG >> /var/log/boot.log


# Markieren Sie das Ende des Bootvorgangs

echo "--------" >> /var/log/boot.log


# Entfernen Sie die temporäre Datei rm -f $BOOTLOG 2> /dev/null

fi


# RC beenden

wenn [ "${error_value}" != "0" ]; dann print_error_msg; fi fertig


# Interaktive Variable beim Wechsel von Runlevel S speichern und entfernen, wenn nicht, wenn [ "${runlevel}" == "S" -a "${interactive}" == "i" ]; dann

echo "interaktiv="i"" > /var/run/interaktiv

sonst

rm -f /var/run/interactive 2> /dev/null

fi


# Kopieren Sie das Boot-Protokoll nur beim ersten Booten

wenn [ "${previous}" == "N" -a "${runlevel}" != "S" ]; dann cat $BOOTLOG >> /var/log/boot.log


# Markieren Sie das Ende des Bootvorgangs

echo "--------" >> /var/log/boot.log


# Entfernen Sie die temporäre Datei rm -f $BOOTLOG 2> /dev/null

fi


# RC beenden


Image

Image

: Gerard Beekmans - [E-Mail geschützt]

: DJ Lucas - [E-Mail geschützt]

: Bruce Dubbs - [E-Mail geschützt]

: Gerard Beekmans - [E-Mail geschützt]

: DJ Lucas - [E-Mail geschützt]

: Bruce Dubbs - [E-Mail geschützt]

: LFS 7.0


: Mit Code basierend auf Matthias Benkmanns simpleinit-msb http://winterdrache.de/linux/newboot/index.html


Die Datei sollte sich in /lib/lsb befinden

: LFS 7.0


: Mit Code basierend auf Matthias Benkmanns simpleinit-msb http://winterdrache.de/linux/newboot/index.html


Die Datei sollte sich in /lib/lsb befinden

Top OS Cloud Computing bei OnWorks: