Wir freuen uns sehr, dass das Forum in der bestehenden Forum fortgeführt wird.
Die Moderatoren werden den Grundgedanken und den Spirit von diesem Forum fortführen. 20. April 2023
Alle Markennamen, Logos und eingetragenen Marken, die auf dieser Website erwähnt werden, sind das Eigentum ihrer jeweiligen Inhaber und durch das Markenrecht geschützt.
ich habe festgestellt, dass das poetd script das in /etc/init.d installiert eine große schwachstelle hat: unter umständen (bzw bei mir immer) wird nicht der parent prozess gestoppt, sondern lediglich ein child prozess, was dann dazu führt, dass nach einem update der datenbank poetd nicht mehr gestartet werden kann. man muss dann nämlich zuerst umständlich den richtigen prozess per hand stoppen.
hier mein patch, der das problem umgeht, indem gleich von vornherein der richtige prozess gestoppt wird:
gute Idee mit dem Patch, ich werde ihn in mein Turbomed-Update-Script aufnehmen (und es dann hier mal posten). Allerdings passt er scheinbar nicht auf mein aktuelles poetd, beim Aufruf mit
$: patch /etc/init.d/poetd ./poetd.patch
erhalte ich:
patching file /etc/init.d/poetd
Hunk #1 FAILED at 93.
Hunk #2 FAILED at 112.
2 out of 2 hunks FAILED -- saving rejects to file /etc/init.d/poetd.rej
- if [ ! -x $PROG_GID ]
+ if [ ! -x $GID ]
then
- echo "KILL Prog: $PROG_NAME mit gid: $PROG_GID"
- kill -9 $PROG_GID
+ echo "KILL Prog: $PROG_NAME mit gid: $GID"
+ kill -9 $GID
else
echo "STOP ?"
exit 1
Leider kenne ich mich mit patches nicht so gut aus, wo mache ich einen Fehler? (Die Zeilennummern stimmen überein)
Weitere Frage: warum verwenden Sie nicht (mehr) den Befehl
ptsu -shutdown localhost
zum Anhalten des Servers?
Das originale (fehlerhafte) poetd-Startscript wird AFAIK bei jedem Update von der CD neu installiert und der ptserver anschließend sofort damit gestartet, so dass die locking-Datei zumindest beim ersten Mal nicht die Prozess-ID enthält. Man muss den Server also nach dem Update erst wieder anhalten, Ihren patch einspielen und dann wieder starten.
einspielen. Dabei wird automatisch im aktuellen Verzeichnis die Datei poetd angepasst.
Weitere Frage: warum verwenden Sie nicht (mehr) den Befehl
ptsu -shutdown localhost
zum Anhalten des Servers?
das war in dem orginal poetd Skript von Mitte März gar nicht drinnen. Da wurde der Server auch schon mit kill -9 beendet. Wobei ich kill -9 für sehr schlecht halte. Meiner Ansicht nach MUSS da ein -15 stehen, da -9 einen Prozess sofort beendet und somit Daten die eventuell noch im Speicher sind, nicht auf die Festplatte geschrieben werden. Deshalb hab ich bei mir das -9 auch durch ein -15 ersetzt (in meinem patch nicht drinnen).
stop()
{
# Stop PTServer
export LD_LIBRARY_PATH
GID=`more $pt_lock`
if [ ! -x $GID ]
then
echo "KILL Prog: $PROG_NAME mit gid: $GID"
$pt_su -shutdown localhost
kill -15 $GID # sicherheitshalber
else
echo "STOP ?"
exit 1
fi
sleep_
PROG_GID=`pidof -s $PROG_NAME`
if [ ! -x $PROG_GID ]
then
echo "RUN $PROG_NAME ( oder ein zweites Prog $PROG_NAME )"
else
echo "STOP $PROG_NAME"
rm -f $pt_lock
fi
}
Ein Problem bei dieser Art, den Server anzuhalten: man muss mit dem nächsten Start ca. 1 min. warten, scheinbar ist vorher noch irgendwas im Speicher, was einen neuen Start verhindert. Somit gibt es Probleme mit poetd restart: hier muss ein sleep 60 hinein. Vielleicht ist das auch der Grund, warum "jdb" dieses Kommando nicht verwendet.
Das Patchen funktioniert bei mir immer noch nicht, aber das bekomme ich noch heraus...
#!/bin/bash
#
# Führt das Update auf dem Linux-Server durch, patcht das init-Script
# und kopiert die CD auf den Server
#
# CD liegt in Laufwerk:
SOURCE="/media/cdrom"
# CD wird kopiert in Verzeichnis:
DEST="/opt/data/turbomed_cd"
# Rechte werden gesetzt auf:
OWNER="colberg.praxis"
Patchdatei zur Korrektur des defekten Init-Scripts:
patchdatei="/home/colberg/poetd.patch"
#
# Ab hier braucht nichts mehr geändert werden.
#
serverproc=ptserver
function myproc {
exec pidof $1 | wc -w
}
if [ $(myproc $serverproc) -gt 2 ];
then
echo Mehrere Prozesse laufen noch
echo Das Update wird nicht durchgeführt
exit
fi
/usr/sbin/TM_update
/etc/init.d/poetd stop
patch /etc/init.d/poetd $patchdatei
mount $SOURCE
cd $SOURCE
rm -R $DEST/*
tar cf - . | (cd $DEST; tar xf - )
chown -R $OWNER $DEST/*
rm -R $DEST/PV3 $DEST/INSTALL
cd
umount $SOURCE
/etc/init.d/poetd start
hab noch was vergessen. es wäre vielleicht bessern den patch vorher mal ausgeführt zu haben und dann die gepatchte version des poetd files immer über die aktuelle version zu kopieren. ich habe nämlich meinen patch auch an turbomed geschickt, so dass diese änderungen eventuell übernommen werden. ein nochmaliges ausführen des patches würde zu einer fehlermeldung führen.