Apache2 startet täglich neu um 6:25 Uhr

02.03.2019 - Lesezeit: ~1 Minute

Apache2 startet täglich neu um 6:25 Uhr, was auf einem Rechner, der 24/7 läuft wenig Sinn macht. (Denn es gibt Leute, die zu dieser Zeit schon arbeiten.;-)

Deshalb habe ich den täglichen cron-job auf 2:25 Uhr umgestellt.

$ sudo nano /etc/crontab
# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 2    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 2    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 2    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
$ sudo service cron reload

Hintergrund

  • damit die Logdateien von Apache nicht zu groß werden werden diese mit Logrotate umbenannt und gepackt.
  • Logrotate stoppt deshalb den Apache bearbeitet die Logdateien und startet den Apache wieder
    /etc/logrotate.conf
    /etc/logrotate.d/apache2
  • Logrotate selbst wird vom cron.dayly aufgerufen
    /etc/cron.daily/logrotate
Tags: Apache logrotate cron

PHP-Abfallkalender

20.02.2019 - Lesezeit: 7 Minuten

<?php

function naechstertermin($image, $ueberschrift, $arr_termine, $firma = " ")
{
$heute = date("Y/m/d");
$termin="";    foreach ($arr_termine as $value) {
  if (($value>=$heute) and ($termin=="")) $termin=$value;
  };
$retval="";
if ($termin<>"") {
  $arr2 = explode("/",$termin);
  $retval = "<p style='height:30px'> <img src='$image'  alt='$ueberschrift' width='25' height='35'  style='float:left; margin-right:5px; margin-top:-5px;' /> $arr2[2].$arr2[1].$arr2[0] $firma</p>\n";
  };
  return $retval;
}

function kecl_termine() {

//Termine fuer die Blauen Tonnen in der Schreibweise YYYY/MM/TT //erzeugt durch wnfAbfallkalender (Lazarus) $bttermine = array ( "2019/02/27", "2019/03/13", "2019/03/27", "2019/04/10", "2019/04/24", "2019/05/08", "2019/05/22", "2019/06/05", "2019/06/19", "2019/07/03", "2019/07/17", "2019/07/31", "2019/08/14", "2019/08/28", "2019/09/11", "2019/09/25", "2019/10/09", "2019/10/23", "2019/11/06", "2019/11/21", "2019/12/04", "2019/12/18", "2020/01/02", "2020/01/15", "2020/01/29", "2020/02/12", "2020/02/26", "2020/03/11", "2020/03/25", "2020/04/08", "2020/04/22", "2020/05/06", "2020/05/20", "2020/06/03", "2020/06/17", "2020/07/01", "2020/07/15", "2020/07/29", "2020/08/12", "2020/08/26", "2020/09/09", "2020/09/23", "2020/10/07", "2020/10/21", "2020/11/04", "2020/11/19", "2020/12/02", "2020/12/16", "2020/12/30" );

//Termine fuer die Gelben Tonnen in der Schreibweise YYYY/MM/TT //erzeugt durch wnfAbfallkalender (Lazarus) $gstermine = array ( "2019/03/01", "2019/03/15", "2019/03/29", "2019/04/12", "2019/04/26", "2019/05/10", "2019/05/24", "2019/06/07", "2019/06/21", "2019/07/05", "2019/07/19", "2019/08/02", "2019/08/16", "2019/08/30", "2019/09/13", "2019/09/27", "2019/10/11", "2019/10/25", "2019/11/08", "2019/11/22", "2019/12/06", "2019/12/20", "2020/01/03", "2020/01/17", "2020/01/31", "2020/02/14", "2020/02/28", "2020/03/13", "2020/03/27", "2020/04/11", "2020/04/24", "2020/05/08", "2020/05/22", "2020/06/05", "2020/06/19", "2020/07/03", "2020/07/17", "2020/07/31", "2020/08/14", "2020/08/28", "2020/09/11", "2020/09/25", "2020/10/09", "2020/10/23", "2020/11/06", "2020/11/20", "2020/12/04", "2020/12/18" );

//Termine fuer die Restabfall in der Schreibweise YYYY/MM/TT //erzeugt durch wnfAbfallkalender (Lazarus) $ratermine = array ( "2019/02/27", "2019/03/13", "2019/03/27", "2019/04/10", "2019/04/24", "2019/05/08", "2019/05/22", "2019/06/05", "2019/06/19", "2019/07/03", "2019/07/17", "2019/07/31", "2019/08/14", "2019/08/28", "2019/09/11", "2019/09/25", "2019/10/09", "2019/10/23", "2019/11/06", "2019/11/21", "2019/12/04", "2019/12/18", "2020/01/02", "2020/01/15", "2020/01/29", "2020/02/12", "2020/02/26", "2020/03/11", "2020/03/25", "2020/04/08", "2020/04/22", "2020/05/06", "2020/05/20", "2020/06/03", "2020/06/17", "2020/07/01", "2020/07/15", "2020/07/29", "2020/08/12", "2020/08/26", "2020/09/09", "2020/09/23", "2020/10/07", "2020/10/21", "2020/11/04", "2020/11/19", "2020/12/02", "2020/12/16", "2020/12/30" );

//Termine fuer die Bio-Tonnen in der Schreibweise YYYY/MM/TT //erzeugt durch wnfAbfallkalender (Lazarus) $bio_kecl_termine = array ( "2019/02/28", "2019/03/14", "2019/03/28", "2019/04/11", "2019/04/25", "2019/05/09", "2019/05/23", "2019/06/06", "2019/06/20", "2019/07/04", "2019/07/18", "2019/08/01", "2019/08/15", "2019/08/29", "2019/09/12", "2019/09/26", "2019/10/10", "2019/10/24", "2019/11/07", "2019/11/21", "2019/12/05", "2019/12/19", "2020/01/02", "2020/01/16", "2020/01/30", "2020/02/13", "2020/02/27", "2020/03/12", "2020/03/26", "2020/04/09", "2020/04/23", "2020/05/07", "2020/05/22", "2020/06/04", "2020/06/18", "2020/07/02", "2020/07/16", "2020/07/30", "2020/08/13", "2020/08/27", "2020/09/10", "2020/09/24", "2020/10/08", "2020/10/22", "2020/11/05", "2020/11/19", "2020/12/03", "2020/12/17", "2020/12/31" );

//Termine fuer die Bio-Tonnen in der Schreibweise YYYY/MM/TT //erzeugt durch wnfAbfallkalender (Lazarus) $bio_veolia_termine = array ( "2019/02/22", "2019/03/08", "2019/03/22", "2019/04/05", "2019/04/20", "2019/05/03", "2019/05/17", "2019/05/31", "2019/06/14", "2019/06/28", "2019/07/12", "2019/07/26", "2019/08/09", "2019/08/23", "2019/09/06", "2019/09/20", "2019/10/04", "2019/10/18", "2019/11/01", "2019/11/15", "2019/11/29", "2019/12/13", "2019/12/27", "2020/01/10", "2020/01/24", "2020/02/07", "2020/02/21", "2020/03/06", "2020/03/20", "2020/04/03", "2020/04/17", "2020/05/02", "2020/05/15", "2020/05/29", "2020/06/12", "2020/06/26", "2020/07/10", "2020/07/24", "2020/08/07", "2020/08/21", "2020/09/04", "2020/09/18", "2020/10/02", "2020/10/16", "2020/10/30", "2020/11/13", "2020/11/27", "2020/12/11", "2020/12/28" );

//echo "

Abfallkalender

"; $s = naechstertermin("sites/default/files/bilder/tonne-gelb.jpg","Gelbe Säcke",$gstermine); echo $s; $s = naechstertermin("sites/default/files/bilder/tonne-blau.jpg","Blaue Tonne",$bttermine); echo $s; $s = naechstertermin("sites/default/files/bilder/tonne-grau.jpg","Graue Tonne",$ratermine); echo $s; $s = naechstertermin("sites/default/files/bilder/tonne-gruen.jpg","Grüne Tonne KECL",$bio_kecl_termine,"KECL"); echo $s; $s = naechstertermin("sites/default/files/bilder/tonne-gruen.jpg","Grüne Tonne Veolia",$bio_veolia_termine,"Veolia"); echo $s; }

kecl_termine(); echo 'KECL Hotline Tel.: 03763 404-0'; echo '
'; echo 'Veolia Hotline Tel.: 0800 088 70 887';

?>

Tags: php

Letsencrypt auf BBB erneuern

20.02.2019 - Lesezeit: 3 Minuten

Von Letsencrypt kommen E-Mails mit der Nachricht

You may need to update your client to the latest version in case it is still using the deprecated TLS-SNI-01 validation method. https://community.letsencrypt.org/t/february-13-2019-end-of-life-for-all-tls-sni-01-validation-support/74209

  • Neue Version von certbot 0.28 installieren

  • Mit dem neuen certbot das Zertifikat erneuern:

    $ certbot --version || /path/to/certbot-auto --version
    certbot 0.28.0
    $ sudo sh -c "sed -i.bak -e 's/^\(pref_challs.*\)tls-sni-01\(.*\)/\1http-01\2/g' /etc/letsencrypt/renewal/*; rm -f /etc/letsencrypt/renewal/*.bak"
    $ sudo certbot renew --dry-run
  • Jetzt kommt die Fehlermeldung:

    IMPORTANT NOTES:
    - The following errors were reported by the server:
    
    Domain: bone.nfix.de
    Type:   connection
    Detail: Fetching
    http://bone.nfix.de/.well-known/acme-challenge/C1ye-gE-z3kMKFE-UQxZ-pkGaLD19E9FA7bHa6malik:
    Error getting validation data
  • Da certbot den http Zugriff auf bone.nfix.de benötigt, muss in der Fritzbox das Port 80 freigegeben sein.

$ sudo certbot renew
Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/bone.nfix.de.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert is due for renewal, auto-renewing...
Plugins selected: Authenticator nginx, Installer nginx
Renewing an existing certificate
Performing the following challenges:
http-01 challenge for bone.nfix.de
Waiting for verification...
Cleaning up challenges

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of nginx server; fullchain is
/etc/letsencrypt/live/bone.nfix.de/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/bone.nfix.de/fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Tags: beaglebone letsencrypt

Radicale auf BBB (Logging: OSError: [Errno 30] Read-only file system: '/var/log/radicale/log')

16.02.2019 - Lesezeit: ~1 Minute

Nachdem ich auf meinen BBB von Ubuntu 16.04 auf Ubuntu 18.04 gewechselt hatte musste ich feststellen, dass das der Radicale-Server nicht mehr lief.

Der Befehl $ journalctl --unit radicale.service -e liefert u.a. diese Fehlermeldung:

OSError: [Errno 30] Read-only file system: '/var/log/radicale/log'

den Radicale-Server anhalten

$ sudo systemctl stop radicale

Da ich nicht herausgefunden habe, warum das Filesystem Read-Only sein soll habe ich in

$ sudo nano /etc/radicale/config

das Logging ausgeschaltet

[logging]
## config = /etc/radicale/logging
## debug = True

den Radicale-Server wieder starten

$ sudo systemctl start radicale
Tags: beaglebone Radicale

pyperclip unter Kubuntu 18.04

21.01.2019 - Lesezeit: 2 Minuten

Mit pyperclip möchte ich einen Text ins Clipboard kopieren.


import pyperclip

def main():
    aClipboard = "Dieser Text soll ins Clipboard"
    print(aClipboard)
    pyperclip.copy(aClipboard)
    print("beendet.")
    return 0

if __name__ == '__main__':
    main()

Das Script liefert die folgenden Warnungen und der Text wird nicht ins Clipboard kopiert. Dieser Text soll ins Clipboard (test_pyperclip.py:17789): Gtk-WARNING **: 06:38:59.827: Theme parsing error: gtk.css:68:35: The style property GtkButton:child-displacement-x is deprecated and shouldn't be used anymore. It will be removed in a future version

(test_pyperclip.py:17789): Gtk-WARNING **: 06:38:59.827: Theme parsing error: gtk.css:69:35: The style property GtkButton:child-displacement-y is deprecated and shouldn't be used anymore. It will be removed in a future version

(test_pyperclip.py:17789): Gtk-WARNING **: 06:38:59.827: Theme parsing error: gtk.css:73:46: The style property GtkScrolledWindow:scrollbars-within-bevel is deprecated and shouldn't be used anymore. It will be removed in a future version beendet.

Da ich die KDE benutze gehe ich davon aus, dass pyperclip das falsche Clipboard anspricht. Mit pyperclip.set_clipboard('klipper') kann pyperclip dazu übereredet werden klipper als Clipboard zu benutzen:

import pyperclip

def main(): aClipboard = "Dieser Text soll ins Clipboard" print(aClipboard) pyperclip.set_clipboard('klipper') pyperclip.copy(aClipboard) print("beendet.") return 0

if name == 'main': main()

Tags: Python

Linux sudoers

03.10.2018 - Lesezeit: ~1 Minute

Der Apache soll vom Nutzer wnf ohne Eingabe des Root-Passwortes gestartet werden. Dazu die Datei /etc/sudoers.d/apache2 mit folgenden Inhalt anlegen:

wnf      ALL=NOPASSWD:   /usr/sbin/service apache2 restart

Zur Beachtung (wiki.ubuntuusers.de)

Die Datei /etc/sudoers sollte immer mit dem Befehl visudo bearbeitet werden, da so eine Syntaxprüfung gewährleistet ist. Die letzte Zeile der Sudoers-Datei muss zudem immer leer sein! Bei der direkten Bearbeitung ohne Prüfung kann der kleinste Tippfehler dazu führen, dass man sich aus dem System aussperrt und nur über den Recovery Modus wieder Zugang erhält.

Tags: Linux-Grundlagen sudoers