BlogBlog ÜbersichtjailscriptportsoptFreeBSDLinksThermoskanne

Paralleles Ausführen eines Shell-Skriptes verhindern

Soll verhindert werden, dass ein Shell-Skript mehrere Male parallel gestartet wird, kann dazu shlock verwendet werden. Im FreeBSD-Portbaum findet man shlock unter sysutlis/shlock:

# cd /usr/ports/sysutils/shlock && make install clean

Benutzer von pkgng können shlock wie folgt installieren:

# pkg install shlock

Nun kann mit shlock ein Shell-Skript mit einer Lockdatei geschützt werden:

# vi lock.sh
LOCK=/var/run/my.lock
trap 'rm -f ${LOCK} ; exit 1' 1 2 3 15
if shlock -p $$ -f ${LOCK} ; then
        sleep 60
else
        echo "Locked by `cat ${LOCK}`"
fi

Versucht man nun das Shell-Skript zweimal zu starten, wird dies von shlock verhindert:

# sh lock.sh &
[1] 84001
# sh lock.sh
Locked by 84001

Mehr Informationen zu shlock findet man in der Manpage shlock(1).

Comments (1)  Permalink

Ports-Subversion-Repository spiegeln

Letztes Wochenende gab es das erste Mal seit dem chruetertee.ch existiert keinen Befehl der Woche. Grund war die Umstellung des FreeBSD-Portbaumes von CVS auf Subversion was mich das letzte Wochenende und die Woche davor ziemlich ausgelastet hat so das keine Zeit für einen Befehl der Woche da war.

Für Benutzer ändert sich nach der Umstellung nichts, falls man aber cvsup(1) oder csup(1) zum aktualisieren des Portbaumes verwendet sollte man allerdings in Betracht ziehen langsam auf portsnap(8) zu wechseln. CVS und CVSup ist zwar im Moment noch unterstützt, wird aber irgendwann in der Zukunft abgeschaltet, natürlich erst nachdem dies vorgängig angekündigt wurde.

Verwendete man bis anhin CVS um Patches gegen den Portbaum zu erstellen so kann dies nun gegen Subversion gemacht werden. Dazu muss zuerst Subversion in installiert werden:

# cd /usr/ports/devel/subversion && make install clean

Das Ports-Subversion-Repository kann nun wie folgt ausgecheckt werden:

# svn co svn://svn.FreeBSD.org/ports/head ports

Möchte man das ganze Ports-Repository spiegeln, zum Beispiel man einen eigenen Repository-Server anbieten will, so kann das initiale Repository von dem nächsten FTP-Server heruntergelanden werden:

# mkdir svnsync
# cd svnsync
# fetch ftp://ftp.ch.freebsd.org/pub/FreeBSD/development/subversion/svnmirror-ports-r300897.tar.xz
# tar xf svnmirror-ports-r300897.tar.xz

Ist das Repository entpackt (Achtung ca. 16 GB) kann es aufsynchronisiert werden:

# svnsync sync file:///pfad/zu/svnsync/ports
Übertrage Daten .
Revision 300898 übertragen.
Eigenschaften für Revision 300898 kopiert.
Übertrage Daten .
Revision 300899 übertragen.
Eigenschaften für Revision 300899 kopiert.
Übertrage Daten .
Revision 300900 übertragen.
Eigenschaften für Revision 300900 kopiert.
Übertrage Daten ..
Revision 300901 übertragen.
Eigenschaften für Revision 300901 kopiert.
Übertrage Daten .
Revision 300902 übertragen.
[...]
Übertrage Daten ..
Revision 301267 übertragen.
Eigenschaften für Revision 301267 kopiert.

Anschliessend kann man seine Arbeitskopieren vom lokalen Repositroy holen:

# svn co file:///pfad/zu/svnsync/ports/head ports

Auch ist es möglich das Repository via svnserve(8) übers Netzwerk zugänglich zu machen. Mehr Informationen zu Subversion und den FreeBSD-Ports findet man im Ports Subversion Primer im FreeBSD Wiki. Mehr Informationen zu Subversion findet man in den Manpages svn(1), svnync(1) und svnserve(8).

Related Entries:
Gespeicherte Optionen nach OptionsNG konvertieren
sysinstall-Ersatz für neuere FreeBSD-Versionen
Alte FreeBSD-Port Patchdateien aufsplitten
FreeBSD-Portbaum auf Fehler überprüfen
FreeBSD-Dokumentation auf bekannte Fehler prüfen
 Permalink

Logdateien auf verschiedenen Rechnern gleichzeitig betrachten

Mit Hilfe von monkeytail kann ein tail -f auf verschiedene Dateien gleichzeitig angewendet werden und das auch auf verschiedenen Rechnern. Im FreeBSD-Portsbaum findet man monkeytail unter sysutils/monkeytail:

# cd /usr/ports/sysutils/monkeytail && make install clean

Benutzer von pkgng können monkeytail wie folgt installieren:

# pkg install monkeytail

Nun können die verschiedenen Logdateien angegeben werden die betrachtet werden sollen:

# mtail /var/log/messages /var/log/auth.log
Tailing /var/log/messages
Tailing /var/log/auth.log
Jul  6 06:27:41 www ntpd[55007]: kernel time sync status change 6001
Jul  6 06:36:13 www ntpd[55007]: kernel time sync status change 2001
Jul  7 03:34:27 www sshd[70336]: error: PAM: authentication error for illegal user admin from 113.162.xxx.yyy
Jul  7 03:34:27 www sshd[70336]: error: PAM: authentication error for illegal user admin from 113.162.xxx.yyy
tail: /var/log/auth.log: Permission denied

Hat man keine Rechte eine Datei zu betrachten, so kann ein + vor dem Pfad angegeben werden und danach wird sudo(8) verwendet um die Datei lesen zu können:

# mtail /var/log/messages +/var/log/auth.log
Tailing /var/log/messages
Sudo password for [beat] on [www]: 
Tailing /var/log/auth.log

Auch ist es möglich gleichzeitig Logdateien von verschiedenen Rechner anzuschauen. Dazu muss man sich auf den entfernten Rechner per SSH einloggen können. Werden für mindestens drei Sekunden keine Logdaten geschrieben so wird dies mit 5 Leerzeilen visualisiert:

# mtail /var/log/messages +/var/log/auth.log test.chruetertee.ch:/var/log/messages
[...]
Jul  7 11:22:42 test sudo:     beat : TTY=pts/1 ; PWD=/usr/home/beat ; USER=root ; COMMAND=/usr/bin/su -




Jul  7 11:23:27 www beat: test mit logger
Jul  7 11:23:29 www last message repeated 2 times




Jul  7 11:24:05 test beat: test

Mehr Informationen zu monkeytail findet man in der Manpage mtail(1).

 Permalink
1-3/3