Archiv für den Monat: September 2015

Git: Lokal in remote Repository

Repository anlegen, dazu in gewünschtes Verzeichnis mydir wechseln:

cd mydir
git init

git status, git add, git commit
… um Änderungen vorzunehmen.

Wenn noch nicht geschehen, dann ein paar globale Einstellungen für Git festlegen:

git config --global user.name "John Doe"
git config --global user.email johndoe@example.com

Config anzeigen lassen mit:

git config --list

Repo mit remote Server verbinden (hier auf bestehenden Github-Server-Account):

git remote add origin https://github.com/myrepo/myrepo.git

Weiterlesen

Shell: Daemonize Script mit supervisord

Um ein Script im Hintergrund laufen zu lassen kann launchtool, upstart oder start-stop-daemon verwendet werden.
Ein einfacher Weg ist aber die Verwendung von supervisord (einem Python-Paket). Nach der Installation mit

sudo apt-get install supervisor

muss die Konfigurationsdatei (Ubuntu: /etc/supervisor/supervisord.conf) angepasst werden.
Dazu muss wenigstens ein Programm hinzugefügt werden, damit sich supervisord darum kümmern kann.

[program:myscript]
command=python /home/myuser/script.py
numprocs=1
autostart=true
autorestart=true
user=myuser

Hier ein Beispiel:

  • Python-Interpreter mit script.py aufrufen
  • Genau eine Instanz erlauben
  • Beim Hochfahren des Rechners starten
  • script.py restarten, wenn das Script nicht mehr läuft
  • Als User „myuser“ laufen lassen

Weiterlesen

Postgres: Advisory Locks und OID für Tabelle ermitteln

Explizite Locks können Race-Conditions verhindern, sind aber blockend.

Advisory locks sind nicht blockend, müssen dafür aber von der Software verarbeitet werden.
Im Grunde wird in der pg_locks ein BigInt gespeichert, den man abfragen kann.

Das Setzen und Abfragen eines Locks kann mit einem BigInt oder mit zwei Integern als ClassId und ObjId erfolgen. Wenn man nur die id einer Tabelle verwendet (würde dann als BigInt interpretiert), dann hätte eine zweite Tabelle mit der gleichen id ebenfalls einen Lock (wenn er abgefragt wird), was ja nicht gewollt sein kann.

Nimmt man eine Nummer für die Tabelle (customer) dann muss die ja irgendwo systemweit verwaltet werden. Postgres hat ja für alle Tabellen bereits eine OID vergeben, die sich dafür eignet.
Die Abfrage mit einem Cast ist einfacher, als die Postgres-Tabellen direkt abzufragen:
SELECT ‚customer‘::regclass::oid liefert die OID zurück. Wenn wir den Datensatz mit der id 17 sperren wollen, dann wäre folgender Query erforderlich:

SELECT pg_try_advisory_lock((SELECT 'customer'::regclass::oid)::integer, 17);

Zum Entsperren:

SELECT pg_advisory_unlock((SELECT 'customer'::regclass::oid)::integer, 17);

Um alle Advisory Locks zu löschen:

SELECT pg_advisory_unlock_all();

Um sich die vorhandenen Locks anzuzeigen:

SELECT * FROM pg_locks;

Shell: awk sourcecode zeilen zählen

Alle PHP-Dateien finden und zählen:

( find ./ -name '*.php' -print0 | xargs -0 cat ) | wc -l

Wenn darin aber Verzeichnisse oder Dateien sind, die man ausschliessen möchte, dann kann es Sinn machen das Ergebnis erst mal in eine Datei zu schreiben und diese manuell zu bereinigen und danach das Zählen durch awk vorzunehmen:

find . -name "*.php" -print0 | xargs -0 wc -l > ausgabe.txt

Jetzt kann die Ausgabe bereinigt werden (nicht vergessen die letzte Zeile mit der Zusammenfassung zu löschen). Und dann lässt man awk zum Zählen laufen, um die erste Spalte aufzusummieren:

awk '{cnt += $1}END{print cnt " Zeilen"}' ausgabe.txt

Shell: Wer ist eingeloggt, wer war eingeloggt?

Anzeigen, wer gerade eingeloggt ist:

hthurat@myserver:~$ w
10:40:22 up 33 days, 23:20,  2 users,  load average: 1.58, 1.65, 0.98
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
hthurat  pts/1    hthurat1.loc     10:40    0.00s  0.41s  0.00s w
lierpows pts/2    f1-gatex.loc     10:19    6:01   0.42s  0.42s -bash

Auflisten, wer sich wann zuletzt eingeloggt hat:

hthurat@myserver:~$ lastlog
hthurat          pts/1    hthurat1.isys.lo Tue Sep  1 10:40:21 +0200 2015
skoch                                      **Never logged in**
lierpows         pts/2    f1-gatex.infosys Tue Sep  1 10:19:15 +0200 2015
...