Um während einer Scriptausführung eine parallele Ausführung des selben Scirpts zu verhindern, kann man dazu ein Lockfile einsetzen.
Hier ein Beispiel wie der Lock aufgebaut werden kann:
#!/bin/bash
lockfile=~/lockfile.lock
# Check is Lock File exists, if not create it and set trap on exit
if { set -C; 2>/dev/null >${lockfile}; }; then
trap "rm -f ${lockfile}" EXIT
else
echo "Lock file exists… exiting"
exit
fi
# Do Something, Main script work here…
echo "I am a script and I am doing something… anything…"
sleep 30
Weitere Beispiele und Möglichkeiten finden sich hier:
Von Ultraedit und Eclipse bin ich mir gewohnt mit dem Spaltenmodus zu arbeiten. Im Notepad++ fehlte mir diese Funktion jedoch. Vorhin habe ich entdeckt wie diese Funktionalität umgesetzt ist.
Alt+C öffnet den Spaltenmodus (Block-Editor). Der Befehl findet sich auch im «Bearbeiten»-Menü. Allerdings lässt sich damit nicht viel steuern. Nun ist der Einsatz als Spalteneditor simpel über reine Tasten respektive Tasten/Maus Steuerung gelöst.
Mit Alt+Shift+Cursor Tasten kann man eine Spalte selektieren.
Mit Alt+Mauszeiger ziehen lässt sich ebenfalls eine Spalte selektieren
Sollen fortlaufende Nummern in die Zeilen eingefügt werden, mit einem der obenstehenden Befehle den entsprechenden Bereich markieren. Dann mit Alt+C den Block Editor öffnen und die Option «Zahlen einfügen» wählen. Hier kann der Startwert und der Interval definiert werden.
Damit ich das nächste Mal nicht suchen muss, dokumentiere ich hier, wie auf einem QNAP NAS ein Cronjob eingerichtet werden kann.
Mit folgendem Befehl können die aktuellen Cronjobs angezeigt werden:
crontab -l
Der normale Befehl crontab -e funktioniert auf QNAP nicht, da dieser bei einem Neustart des Geräts überschrieben werden würde. Deshalb muss die Crontab Datei direkt bearbeitet werden.
vi /etc/config/crontab
Nach dem die Cronjobs angepasst und die Datei gespeichert wurde, muss das Crontab file neu geladen und der cron daemon neu gestartet werden.
Um auf einem Linux Server (in meinem Beispiel Ubuntu) Mails versenden zu können, kann Postfix als SMTP Server konfiguriert werden.
Postfix installieren
Postfix lässt sich am schnellsten mit den Mail-Utils installieren
sudo apt update
sudo apt install mailutils
Während der Installation fragt Postfix nach dem Modus in dem es installiert werden soll
Als Standard-Option ist «Internet Site» vorbelegt. Dies ist für unseren Anwendungsfall korrekt. Sollte diese Meldung während der Installation nicht erfolgen, so kann dies mit folgenem Befehl die Konfiguration von Postfix nochmals durchgeführt werden:
sudo dpkg-reconfigure postfix
Anschliessend den Namen des Servers festlegen. Der System-E-Mail-Name muss gleich sein wie der Name, welcher deim erstellen des Servers diesem zugewiesen wurde.
Konfiguraton von Postfix
Nun muss die Konfiguration von Postfix angepasst werden, so dass die E-Mails über einen externen SMTP Server versandt werden können.
sudo nano /etc/postfix/main.cf
Folgende Zeilen müssen angepasst werden (bestehende Werte ersetzen)
–> relayhost muss mit dem genutzten Mailserver ergänzt werden.
sasl_passwd Datei erstellen
Nun die sasl_passwd Datei erstellen
sudo nano /etc/postfix/sasl_passwd
Folgenden Inhalt einfügen:
[mail.domain.ch]:port user:pass
Anschliessend die Datenbank hashen
sudo postmap /etc/postfix/sasl_passwd
Nun Postfix neustarten
sudo service postfix restart
Test-E-Mail versenden
Über folgenden Befehl kann nun getestet werden ob E-Mails über Postfix versandt werden können:
echo "Das ist der E-Mail Inhalt!" | mail -s "Betreff des Mails" -a "From: absender@domain.ch" empfaenger@domain.ch
Sollte kein E-Mail ankommen, so kann im Logfile nachgeschaut werden was Postfix zurückmeldet:
tail -100 /var/log/mail.log
Absenderadresse fix einstellen
Je nach dem kann es sinn machen, eine fixe E-Mailadresse als Absender einzustellen, da über den SMTP Server nur definierte E-Mailadressen oder Domains verwendet werden können. Diese Konfiguration ändert die Absenderadressen sowohl von lokalem als auch von weitergeleitetem SMTP-Mailverkehr:
Erhält man von einem Mac-User eine Zip-Datei, enthält diese immer Dateien und Ordner welche unter Windows oder Linux keinen Zweck haben. So gibt es .DS_Store Dateien und einen __MACOSX Ordner. Diese Dateien sind normalerweise versteckt und werden je nach Einstellung angezeigt.
In den Dateien werden von MacOS Informationen zur Datei- und Ordnerstruktur sowie Datei-Icons gespeichert. Diese Dateien werden automatisch angelegt und können nicht wirklich gelöscht werden, da sie als Metadaten vom Betriebssystem unmittelbar danach wieder angelegt werden.
Die nachfolgende Anleitung bezieht sich auf das Entfernen unter Mac OS.
.DS_Store Dateien aus einem Zip-Archiv entfernen
Auf dem Mac das «Terminal» öffnen. Danach den folgenden Befehl eingeben.
zip -d /pfad/zur/zip-datei/DATEINAME.zip \*.DS_Store
Mit dem -d werden die angegebenen Dateien entfernt.
__MACOSX Ordner entfernen
Auch diese Ordner können über das Terminal in der Zip-Datei bereinigt werden
zip -d /pfad/zur/zip-datei/DATEINAME.zip "__MACOSX*"
Beide Befehle kombinieren
Natürlich kann die Bereinigung auch mit einem Durchgang ausgeführt werden:
zip -d /pfad/zur/zip-datei/DATEINAME.zip "__MACOSX*" \*.DS_Store
Beim addieren von mehr als 24h in Excel wird die Stundenzahl nicht mehr korrekt dargestellt, da nach 24h die Zeit in Tage und Stunden umgerechnet wird. Mit folgender Einstellung werden die Stunden korrekt dargestellt:
Zellen formatieren
Auf Rubrik «Benutzerdefiniert» klicken und folgenden Wert eingeben:
[hh]:mm
Im Beispiel des Printscreens ist die Stundenzahl einstellig sowie mit einem «h» am Schluss versehen.
Mit oben stehendem Befehl wird Windows dazu gezwungen die Gruppenrichtlinien mit den Informationen zu Gruppenzugehörigkeit zu aktualisieren ohne das System neustarten zu müssen.
In Apple Mail kann es vorkommen, dass ein E-Mail nicht gelöscht werden kann. Es erscheint jeweils die Meldung:
"Die Email "[Betreff]" konnte nicht in das Postfach "[Postfachname]"
verschoben werden. Das angegebene Objekt wurde im Informationsspeicher
nicht gefunden"
Das kann in IMAP oder Exchange Mailkonten vorkommen. Meistens passiert dies, wenn das E-Mail auf zwei Geräten gleichzeitig gelöscht wird. So wird das E-Mail z.B. zuerst auf dem Handy gelöscht und danach bevor die Lösung synchronisiert wurde, im Apple Mail gelöscht.
Dann erscheint das E-Mail wieder und lässt sich mit oben stehender Meldung nicht mehr löschen. Mit folgender Anleitung kann das E-Mail dennoch gelöscht werden:
Die aktuelle c’t 23.2020 widmet sich den Sicherheitslücken. Eine «Lücke» ist die Rest-API von WordPress. Die WordPress REST API ist eine Schnittstelle, mit der Entwickler von außerhalb der WordPress-Installation selbst auf WordPress zugreifen können. Der Zugriff erfolgt über JavaScript, d.h. es können damit interaktive Webseiten und Apps erstellt werden.
Die Rest-API wird über www.domain.tld/wp-json aufgerufen. Folgend ein paar Beispiele was man da alles abrufen kann:
/wp-json/wp/v2/media
/wp-json/wp/v2/pages
/wp-json/wp/v2/comments
/wp-json/wp/v2/users
Dies ist grundsätzlich nicht ein Problem. Allerdings können je nach Konstellation dadurch durchaus Daten ausgelesen werden, welche nicht für fremde Augen bestimmt sind. Nun gibt es verschiedene Plugins oder auch Snippets um die API zu deaktivieren:
Damit wird der Zugriff auf die IP auf eingeloggte User beschränkt. Nun ist das jedoch ein Problem. Setzt man z.B. das beliebte Plugin Contact Form 7 ein, kann ein Formular nur noch abgesendet werden, wenn der Webseitenbesucher auf der Seite angemeldet ist, da Contact Form 7 die Rest-API nutzt, um das Formular abzusenden.
Eine bessere Umsetzung zur Einschränkung der API ist folgender Ansatz, den ich in StackOverflow gefunden habe:
/*-----------------------------------------------------------------------------------*
/* Secure Rest API - Remove some endpoints for non logged in users *
/*-----------------------------------------------------------------------------------*
function myplugin_removes_api_endpoints_for_not_logged_in() {
if ( ! is_user_logged_in() ) {
// Removes WordPress endpoints:
remove_action( 'rest_api_init', 'create_initial_rest_routes', 99 );
// Removes Woocommerce endpoints
if ( function_exists('WC') )
remove_action( 'rest_api_init', array( WC()->api, 'register_rest_routes' ), 10 );
}
}
add_action('init', 'myplugin_removes_api_endpoints_for_not_logged_in');
In dieser Umsetzung wird nicht die gesamte API deaktiviert sondern die relevanten Daten von WordPress und Woocommerce entfernt, sofern der Webseitenbesucher nicht eingeloggt ist.
Letzhin musste ich im Excel die Summe aller Beträge auf die einzelnen Monate des Jahres aufteilen. Mit der Formel SUMMEWENN können Summen mit einer einzelnen Bedingung z.B. einer Kategorie umgesetzt werden. Brauchen wir nun die Summe aller Beträge des Monats Januar, kommen wir mit SUMMEWENNS ans Ziel, welche aus mehreren Bedingungen aus einer «Nebenzelle» bestehen kann:
Somit summieren wir alle Werte der Spalte B, deren „Nebenzelle“ in A größer gleich ist als der 1.1.2020 UND kleiner gleich dem 30.1.2020.
Beim kopieren der Formel ins Excel müssen allenfalls die Anführungszeichen in der Formel neu geschrieben werden.
Anstelle eines fixen Datums kann auch der Verzweis zu einer Zelle verwendet werden:
=SUMMEWENNS(B:B;A:A;">=" &D3;A:A;"<=" &E3)
In diesem Beispiel ist das Startdatum in der Zelle D3 und das Enddatum in der Zelle E3.
Es können auch weitere Kriterien hinzugefügt werden. So können z.B. auch nur Datensätze gezählt werden welche innerhalb eines Datumsbereichs liegen und einem weiteren Kriterium entsprechen:
In diesem Beispiel muss der Datumsbereich innerhalb des Jahres 2022 liegen sowie dem Kriterium «Lebensmittel» entsprechen.
Wichtig: Das Feld in welchem das Datum steht, muss auch als Datum formatiert sein. Ich habe auch schon Beispiele gesehen in denen '01.01.2022 stand. Das Datum hatte in Hochkomma vorgesetzt. Damit funktioniert es natürlich nicht, da ein solches Datum ungültig ist.