acme.sh: Ausführungszeit tägl. Cronjob ändern

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

mjth.ffb

Benutzer
Registriert
30. Jan. 2023
Beiträge
66
Reaktionspunkte
33
Punkte
24
Servus zusammen,
bzgl. acme.sh bräuchte ich mal Hilfestellung.
Ich habe mir vor kurzem damit ein LE Zertifikat für meinen DDNS Anbieter (ipv64.net) geholt. Hat auch alles wunderbar geklappt.
In der Protokollansicht des Containers erscheint nun ein täglicher cronjob, der vermutlich so eine Art Check macht (verzeiht meine laienhafte Ausdrucksweise), wann das Zertifikat zu erneuern ist.
Dieser Cronjob ist im Containerterminal mit dem Befehl crontab -l auch abrufbar.
Problem ist, das die Ausführung um 23:29 Uhr UTC stattfindet, also um 01:29 GMT Zeit. Da ich meine DS224+ zukünftig in der Nacht ausschalten will, möchte ich natürlich auch diesen Cronjob in die Betriebszeiten legen.
Wie muss ich da vorgehen?

Vielen Dank im Voraus

Mikey
 
Der tägliche Lauf innerhalb des Containers ist relativ unnütz, da die meiste Zeit nichts passiert, sondern nur geprüft wird, ob das Update-Fenster erreicht ist.

Ich mach das mit einem zusätzlichen Lauf über den DSM-Aufgabenplaner jeden Monat mit
Code:
docker exec neilpang-acme.sh1 /acme.sh/acme_renew.sh
und folgendem Inhalt
Code:
export DOMAIN=meinedomain.com
export SYNO_CERTIFICATE="*.$DOMAIN"
acme.sh --renew "$@" -d $DOMAIN -d *.$DOMAIN --dns dns_netcup --dnssleep 900
status=$?
if [ $status -eq 0 ]; then
  echo "Deploying $DOMAIN ..."
  export SYNO_HOSTNAME="DS1522"
  echo "Deploying $SYNO_CERTIFICATE to $SYNO_HOSTNAME ..."
  acme.sh --deploy -d $DOMAIN -d *.$DOMAIN --deploy-hook synology_dsm
  export SYNO_HOSTNAME="DS415"
  echo "Deploying $SYNO_CERTIFICATE to $SYNO_HOSTNAME ..."
  acme.sh --deploy -d $DOMAIN -d *.$DOMAIN --deploy-hook synology_dsm
else
  echo "Renew of $DOMAIN failed"
fi
 
  • Like
Reaktionen: mjth.ffb
@Benares
vielen Dank für Deine Hilfestellung. Trotzdem noch ein paar Fragen. Bzgl. Scripts etc bin ich ein DAU:rolleyes:
Grundsätzlich muss der Container acme ja laufen, oder? Tut er bei mir und im Dockerverzeichnis liegt bei mir ein Ordner "acme" mit dem erstellten Zertifikat, das ich auch erfolgreich zur Synology deployen konnte, der account.conf etc. Habe das nach einer hier in einem früheren Thread geschilderten Anleitung von EdvonSchleck gemacht. Hat wie gesagt funktioniert.

Dein erster Code ist der für den Aufgabenplaner und wird monatlich 1x gestartet. Damit wird ein sh Script aufgerufen namens acme_renew.sh, welches der zweite Code darstellt. Wo liegt dieses Script? In einem Ordner /acme? Ist der im Dockerverzeichnis oder wo? Weil ich sehe keine Volumeangabe.

Dein zweiter Code ist das eigentliche Script. Hier kommt bei meineDomain.com eben meine rein. Der Rest ist für mich halbwegs nachvollziehbar, nur bei Zeile 3 dns_netcup weiß ich nicht weiter. Soll ich hier meinen DNS Provider angeben?
Den Deploy zur zweiten Syno hab ich entfernt, da ich ja nur eine habe.

Ich hoffe ich hab das einigermassen beschrieben. Wenn`s allerdings mit Terminal und innerhalb Container oder root Verzeichnis losgeht bin ich raus. Das wäre mir zu kompliziert.

Schöne Sonntag noch, hoffentlich an einem kühlen Ort.

Mikey
 
Wo liegt dieses Script?
Das Script acme_renew.sh habe ich einfach unter /volume1/docker/acme abgelegt, was aus Sicht des Containers dem Verzeichnis /acme.sh entspricht.
Es macht im Grunde das, was der eingebaute cronjob täglich auch macht, es erneuert das Zertifikat unter Nutzung des DNS-Challenge bei meinem DNS-Provider, bei mir ist das Netcup, und "deployed" es im Erfolgsfall an meine DSen DS1522 (lokal, denn dort läuft das Script) und meine DS415 (remote).

Das "$@" in der 3. Zeile steht für weitere Argumente aus der Kommando-Zeile die durchgereicht werden, man kann also z.B. mit "acme_renew.sh --force" eine Aktualisierung erzwingen, auch wenn das Update-Zeitfenster noch nicht erreicht ist. Ansonsten käme sowas:
Code:
/acme.sh # ./acme_renew.sh                                                       
[Sun Jun 29 09:04:57 UTC 2025] The domain 'xxxx.com' seems to already have an ECC cert, let's use it.                                                       
[Sun Jun 29 09:04:57 UTC 2025] Renewing: 'xxx.com'                        
[Sun Jun 29 09:04:57 UTC 2025] Renewing using Le_API=https://acme-v02.api.letsencrypt.org/directory                                                               
[Sun Jun 29 09:04:57 UTC 2025] Skipping. Next renewal time is: 2025-08-25T13:23:24Z                                                                               
[Sun Jun 29 09:04:57 UTC 2025] Add '--force' to force renewal.                   
Renew of xxx.com failed
 
  • Like
Reaktionen: mjth.ffb
@Benares
Danke auch für Deine Geduld.
Soweit alles vorbereitet, aber Script bricht ab mit folgendem Fehler:

exec /acme.sh/acme_renew.sh: exec format error

hier mein Code für den Aufgabenplaner, wobei acme der Name des Containers ist:
Code:
docker exec acme /acme.sh/acme_renew.sh

hier mein Code der acme_renew.sh, die in volume1/docker/acme liegt:
Code:
export DOMAIN="meine.ipv64domain"
export SYNO_CERTIFICATE="*.$DOMAIN"
acme.sh --renew "$@" -d $DOMAIN -d *.$DOMAIN --dns dns_ipv64 --dnssleep 900
status=$?
if [ $status -eq 0 ]; then
  echo "Deploying $DOMAIN ..."
  export SYNO_HOSTNAME="Synology"
  echo "Deploying $SYNO_CERTIFICATE to $SYNO_HOSTNAME ..."
  acme.sh --deploy -d $DOMAIN -d *.$DOMAIN --deploy-hook synology_dsm
else
  echo "Renew of $DOMAIN failed"
fi

Die Domain einmal mit und ohne Anführungszeichen probiert. Wo mach ich den Fehler?
 
Da fallen mir spontan 2 Dinge ein:

1. Das Script wurde mit einem Nicht-Linux-fähigen Editor erstellt. Linux verwendet nur Linefeeds (LF) am Zeilenende, Windows dagegen Carriage Return+Linefeed (CRLF). Bei Notepad++ kann man das einstellen
1751192769513.png

2. Das Script muss ausführbar sein (x-Rechte), damit es wie ein Befehl verwendet werden kann. "chmod 755 ..." setzt die Rechte auf "-rwxr-xr-x". Du musst also einmalig über die Konsole ran.
Code:
/ # cd /acme.sh                                                                  
/acme.sh # ls -als                                                               
total 16                                                                         
0 drwxr-xr-x 1 root root  140 Mar  8  2023 .                                     
0 drwxr-xr-x 1 root root  164 Jun 27 13:06 ..                                    
4 -rwxr-xr-x 1 root root  760 Jun 29 09:04 account.conf                          
4 -rwxr-xr-x 1 root root  413 May  8  2024 acme_deploy.sh                        
4 -rwxr-xr-x 1 root root  582 May 20 07:49 acme_renew.sh                         
0 drwxr-xr-x 1 root root  230 Feb  6  2024 baum-meyer.com_ecc                    
0 drwxr-xr-x 1 root root   56 Feb 23  2023 ca                                    
4 -rwxr-xr-x 1 root root 1306 Jun 28 23:29 http.header                           
/acme.sh # chmod 755 acme_renew.sh                                               
/acme.sh # ls -als                                                               
total 16                                                                         
0 drwxr-xr-x 1 root root  140 Mar  8  2023 .                                     
0 drwxr-xr-x 1 root root  164 Jun 27 13:06 ..                                    
4 -rwxr-xr-x 1 root root  760 Jun 29 09:04 account.conf                          
4 -rwxr-xr-x 1 root root  413 May  8  2024 acme_deploy.sh                        
4 -rwxr-xr-x 1 root root  582 May 20 07:49 acme_renew.sh                         
0 drwxr-xr-x 1 root root  230 Feb  6  2024 baum-meyer.com_ecc                    
0 drwxr-xr-x 1 root root   56 Feb 23  2023 ca                                    
4 -rwxr-xr-x 1 root root 1306 Jun 28 23:29 http.header
 
  • Like
Reaktionen: mjth.ffb

Additional post fields

 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat