Hallo!
Folgende Frage. Was macht dieser Code genau?
while [ 1 ]; do
if [ ! $(pidof $SERVER_BIN) ]; then
screen -d -m chroot $SERVER_ROOT su -
$SERVER_USER $SERVER_OPTIONS
# speziell dieser teil. wie kann ich su machen ohne passwort, als
# normaler user? check ich nicht ganz.
sleep 1
if [ ! $(pidof $SERVER_BIN) ]; then
echo "
Could not find a PID for ${SERVER_BIN}!"
rm $PIDFILE
exit;
fi
echo `pidof $SERVER_BIN` > $SERVER_PIDFILE
fi
sleep 30;
done;
Danke für die Hilfestellung/Erklärung!
MfG Alex
shell - code
Re: shell - code
at120 wrote:Hallo!
Folgende Frage. Was macht dieser Code genau?
Code: Select all
while [ 1 ]; do
if [ ! $(pidof $SERVER_BIN) ]; then
screen -d -m chroot $SERVER_ROOT su -
$SERVER_USER $SERVER_OPTIONS
# speziell dieser teil. wie kann ich su machen ohne passwort, als
# normaler user? check ich nicht ganz.
sleep 1
if [ ! $(pidof $SERVER_BIN) ]; then
echo "
Could not find a PID for ${SERVER_BIN}!"
rm $PIDFILE
exit;
fi
echo `pidof $SERVER_BIN` > $SERVER_PIDFILE
fi
sleep 30;
done;
Hier handelt es sich um eine Endlosschleife in der ca. alle 30 sek. geprüft wird, ob ${SERVER_BIN} noch existiert (eine PID hat). Wenn dem nicht mehr sein sollte wird screen im detached mode gestartet und die Kommandos 'chroot ${SERVER_ROOT}' und 'su ${SERVER_USER} ${SERVER_OPTIONS}' ausgeführt.
Anschließend wird nach einer Sekunde noch einmal geprüft, ob ${SERVER_BIN} läuft (also eine PID dazu existiert). Wenn nicht, wird eine Fehlermeldung ausgegeben, das eventuell vorhandene ${PIDFILE} gelöscht und das Skript beendet sich. Läuft ${SERVER_BIN} wird die dazugehörige PID nach ${PIDFILE} geschrieben und die Schleife geht wieder von vorne los.
Zu Deiner Frage wegen des 'su': Entweder hat ${SERVER_USER} kein Passwort, der User-Kontext unter dem das Skript ausgeführt wird ist 'root' (root darf ohen Passwort su-en) oder ${SERVER_OPTIONS} enthält das Passwort. So kann es gehen.
http://tldp.org/LDP/abs/html/index.html
So wirklich gut geschrieben ist dieses Skript allerdings nicht - es funktioniert im Fehlerfall genau einmal ... :/
Re: shell - code
wieso rennt der script nur einmal?
wg. su:
was ist wenn ich den script in /etc/rc.d/init.d/rc.server_start reingebe?
brauche ich da auch ein passwort?
mfg alex
wg. su:
was ist wenn ich den script in /etc/rc.d/init.d/rc.server_start reingebe?
brauche ich da auch ein passwort?
mfg alex
-
captaincrunch
- Userprojekt

- Posts: 7066
- Joined: 2002-10-09 14:30
- Location: Dorsten
- Contact:
Re: shell - code
Wenn du's per su machst auf jeden Fall. Zu diesem Zweck wäre sudo besser geeignet. Mir ist nur immer noch nicht ganz klar, was du damit anfangen willst ... weißt du es wenigstens ? ;)
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc
Re: shell - code
Desderwegens:at120 wrote:wieso rennt der script nur einmal?
Code: Select all
if [ ! $(pidof $SERVER_BIN) ]; then
echo "Could not find a PID for ${SERVER_BIN}!"
rm $PIDFILE
exit;
fi
Rein theoretisch nicht - die init-Skripte laufen im Allgemeinen unter ID 0 (= root). Aber ist das sinnvoll?wg. su:
was ist wenn ich den script in /etc/rc.d/init.d/rc.server_start reingebe?
brauche ich da auch ein passwort?
Schau Dir doch mal /etc/init.d/functions an (unter Debian: 'man start-stop-daemon' et. al.), dort findest Du Funktionalität zum sauberen Starten und Stoppen von Diensten ...