LinuxMint Cronjob wird nicht ausgeführt?

4 Antworten

Prüfen ob cron läuft. Log Files inszipieren. Wenn es sich um eine Nutzer-Crontab handelt, prüfen ob dem Nutzer erlaubt ist, eine Crontab zu haben.

In der Crontab vollständige Pfade verwenden, auf korrektes Quoten etc. achten. Im Zweifelsfall einrichten, daß cron eine Mail verschickt, bzw. explizit stdout/stderr loggen.

Es gibt eien ganze Latte an Möglichkeiten das PRoblem zu identifizieren.

P.S.: Anstatt vollständiger Pfade kann ich natürlich auch einen Suchpfad in der crontab setzen - das aber nur am Rande.

Der cronjob ist in der crontab von yunus gespeichert? Teste mal den absoluten Pfad zu rsync.

Erstell mal einen Systemd Service mit folgendem Inhalt:

[Unit]
Description=Sync Dropbox
Wants=dropbox-sync.timer

[Service]
User=yunus
ExecStart=/home/yunus/Dropbox-Sync/sync.sh

Im gleichen Verzeichnis legst Du die dropbox-sync.timer ab mit folgendem Inhalt:

[Unit]
Description=Dropbox Sync Timer

[Timer]
OnBootSec=5min
OnCalendar=*-*-* *:*/3:00

[Install]
WantedBy=multi-user.target

Und dann

systemctl daemon-reload
systemctl enable --now dropbox-sync.timer

stuhlkonsistenz 
Fragesteller
 10.12.2023, 12:40

Jop. Wenn ich den Befehl ausführe, wird er ausgeführt und alles der Befehl wird korrekt vollzogen.

0
stuhlkonsistenz 
Fragesteller
 10.12.2023, 12:51
@KuarThePirat

*/2 * * * * /usr/bin/rsync -av --delete /home/yunus/Schreibtisch/ /home/yunus/Dropbox/Schreibtisch/
Klappt so leider auch nicht

0

rsync kann nicht ausgeführt werden, weil das System nicht weiß, wo rsync zu finden ist.

Dort hat man die Environment-Variable PATH nicht, man muss also den gesamten Pfad eintragen.

which rsync sagt dir das. (Schreibe am Smartphone und kann es nicht selbst ermitteln )

Woher ich das weiß:Berufserfahrung – openSuSE seit 1995

stuhlkonsistenz 
Fragesteller
 11.12.2023, 11:06

  

*/2 * * * * /usr/bin/rsync -av --delete /home/yunus/Schreibtisch/ /home/yunus/Dropbox/Schreibtisch/

So sieht meine crontab jetzt aus. Leider immer noch ohne Erfolg.

0
guenterhalt  11.12.2023, 17:14
@stuhlkonsistenz

bei mir läuft obenSuSE Linux, da muss ich nicht mal den Pfad ( /usr/bin ) hinzuschreiben, der wird gleich in den Kopfzeilen gesetzt.
( PATH=/usr/bin:/usr/sbin:/sbin:/bin:/usr/lib/news/bin )

Bei dir fehlt vor /usr/bin/rsync noch der User-Name unter dessen ID der Job laufen soll.

vielleicht so:

*/2 * * * *  yunus /usr/bin/rsync -av --delete /home/yunus/Schreibtisch/ /home/yunus/Dropbox/Schreibtisch/
0

Crontab wäre hier nur eine der Möglichkeiten was du nutzen kannst.

Crontab

Entweder einfach in der CLI zum aufrufen der Crontab Datei

crontab -e

Eintragen und mit [Enter] bestätigen. Oder aber die cro Datei des jeweiligen Nutzer verwenden.

Der Aufbau ist fast immer der gleiche, bei crontab - e muss u. U. Ein sudo vorrangestellt werden. Finde ich persönlich recht unglücklich.

Die separate Cron Datei muss hingehen noch den Nutzer aufweisen

* * * * * $USER Befehl 

Und natürlich cron neustarten nicht vergessen.

Die in meinen Augen bessere Variante :

Systemd

Dafür brauchen wir

  • Skript
  • Service
Skript

Dafür erstellst du ein Skript

sudo nano  /path/to/script.sh

Mit folgendem Inhalt

#!/bin/bash

Das was das Skript halt machen soll, oder eben der Befehl

Das Skript muss nun ausführenbar gemacht werden

sudo chmod -x  /path/to/script.sh

Ausprobieren ob dein Skript macht was es soll kannst du mit

sh  /path/to/script.sh
Service

Danach brauchen wir noch den Service der dieses Skript ausführt

sudo nano path/toService/Name.service

Diese Datei muss folgenden inhalt haben

[Unit]
Description=was macht der Service

[Service]

ExecStart=/path/to/script.sh
Type=simple

[Install]
WantedBy=multi-user.target

Das Ganze denn speichern und

sudo chmod 644  path/toService/Name.service

Danach

sudo systemctl enable Name.service 
sudo systemctl start Name.service

Ob der Service Job läuft siehat du hier

sudo systemctl status Name.service

Wie du dir denken kannst habe ich natürlich ein paar Platzhalter verwendet

/path/to/script.sh >>> das wäre dort wo du deine Skripte speichern willst und halt auch den Namen dafür verwenden

Name.service >>> hier ist Name der Platzhalter und kann von dir relativ frei gewählt werden (sofern der Name noch frei ist)

Das das Ganze über das Terminal einzugeben ist, erklärt sich hoffentlich selbst.


stuhlkonsistenz 
Fragesteller
 10.12.2023, 13:41

Danke für die Hilfe!
Bei Variante 1 ist dieser Befehl also falsch?
*/2 * * * * /usr/bin/rsync -av --delete /home/yunus/Schreibtisch/ /home/yunus/Dropbox/Schreibtisch/

0
stuhlkonsistenz 
Fragesteller
 10.12.2023, 13:49

https://i.imgur.com/xZL7xvA.png Gab ein Problem. Und wie stelle ich ein, dass das Script reglemäßg ausgeführt wird, alle 3m ?

0
stuhlkonsistenz 
Fragesteller
 10.12.2023, 14:07
@anTTraXX

sudo nano path/toService/Name.service
Was muss ich bei path/toService einsetzen?

0