cron

SQL Query in Crontab

Written by  on April 16, 2017

Soll ein Cronjob eine SQL Query ausführen, läuft man schnell in ein Problem. Das Prozenzeichen % hat eine Sonderbedeutung in der Crontab. Es erzeugt einen Zeilenumbruch. Das folgende Beispiel funktioniert niemals, weil der Suchbegriff falsch interpretiert wird und ausserdem alles nach dem Suchbegriff abgeschnitten wird:
Hier ein Beispiel:

mysql -e "SELECT * FROM users WHERE name LIKE a%;" database

Ich konnte diesen nicht wirklich schönen Workaround dafür finden.

echo "SELECT * FROM users WHERE name LIKE a\%;" | sed -e 's|\\||g' | mysql database

Das Prozenzeichen wird vor Cron geschützt. sed löscht das quote Zeichen wieder, bevor es an die Datenbank weitergeschickt wird.
Für ganz einfache Dinge reicht das. Ich empfehle aber trotzdem gleich ein Script zu erstellen. Dadurch wird dieser komplexe Teil unnötig und insgesamt besser lesbar.

Start a not running process via cron

Written by  on Februar 24, 2017

Beispielcode zum Starten eines Prozesses, wenn diese nicht mehr Läuft. Direkt zur Verwendung in Cron.

#!/bin/bash

PROG="apache"
ps -ww aux | grep -v grep | grep $PROG >/dev/null 2>&1
if [[ $? -eq 0 ]]; then
  echo "$PROG found"
else
  echo "$PROG not found"
  # hier restart einfügen
fi

Achtung: Das Script einfach parametrisierbar zu machen via $1 statt $PROG funktioniert nicht, da $1 auch wieder von PS gefunden wird. Es wird daher immer der $PROG found Zweig durchlaufen!

Priorität der Update Prozesse unter SuSE Linux 10.3 herabsetzen

Written by  on Januar 19, 2008

Dies ist eine Art Fortsetzung zum Post "Priorität der Update Prozesse unter SuSE Linux 10.2 herabsetzen".
Da unter openSuSE 10.3 ja mittlerweile der Zypper auch sehr herumzicken kann (z.B. kein normales Surfen mehr möglich, weil genau dieser Prozess austickt) hab ich mir dafür ebenso einen Cronjob geschaffen, der einfach die Priorität dieser Prozesse auf ein Minimum reduziert. Die sollte dem restlichem System nicht weh tun, da hier normalerweise nur die Überprüfung auf Onlineupdates läuft:

/etc/crontab

-* * * * *      root    ps aux | grep [z]ypper | awk '{print $2}' | xargs -i renice 19 {}

crond in eine eigene Datei loggen lassen

Written by  on Juni 16, 2007

Gerade wenn man Skripte wie das vom letzten Eintrag benutzt, wird ohne das führende Minuszeichen jede Minute ein unnötiger Log-Eintrag unter /var/log/messages generiert. Meine erste Überlegung dazu war es, überhaupt die Logs von Cron zu deaktivieren. Aber da ich ja vielleicht auch mal wissen möchte, ob ein Cronjob überhaupt gelaufen ist, lagere ich das jetzt in eine eigene Logdatei unter /var/log/cron aus.

Dazu sind nur ein paar kleine Änderungen notwendig:

/etc/syslog-ng/syslog-ng.conf:

filter f_messages   { not facility(news, mail, cron) and not filter(f_iptables); };
destination cron { file("/var/log/cron"); };
log { source(src); filter(f_cron); destination(cron); };

In der ersten Zeile wurde nur eingestellt, dass die Meldungen von der CRON facility nicht noch zusätzlich in der /var/log/messages landen. Bei den letzten zwei Zeilen wurden nur mehr die Kommentarzeichen entfernt (unter openSuSE 10.1 und 10.2)!

Anschließend noch den syslog Dienst neustarten und unter /etc/logrotate.d/ eine Konfigurationsdatei anlegen, damit das neue Logfile nicht nur unendlich wächst.

Hier noch ein simples Beispiel dazu:

/var/log/cron {
    compress
    dateext
    maxage 100
    rotate 10
    size=+1024k
    notifempty
    missingok
    copytruncate
}

Priorität der Update Prozesse unter SuSE Linux 10.2 herabsetzen

Written by  on Juni 7, 2007

Da unter openSuSE der ZMD Update oft jede Menge Resourcen frisst, hab ich mir jetzt einen kleinen, feinen Cronjob gebastelt der die Priorität herabsetzt und somit auch das System unmittelbar nach dem Start schneller benutzbar macht.

Der simple Eintrag in der /etc/crontab lautet:

-* * * * *      root  ps aux | egrep 'update-status|parse-metadata' | grep -v grep | awk '{print $2}' | xargs renice 19

Die Funktion sollte woch für jeden Linux-"Laien" ziemlich ersichtlich sein 😉