LinuxMint Cronjob wird nicht ausgeführt?
Der Befehl lautet:
rsync -av --delete /home/yunus/Schreibtisch/ /home/yunus/Dropbox/Schreibtisch/
Der Cronjob sieht so aus:
*/2 * * * * rsync -av --delete /home/yunus/Schreibtisch/ /home/yunus/Dropbox/Schreibtisch/
Befehl an sich funktioniert, Cronjob ist korrekt gespichert, in der korrekten Datei.
MfG
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
Ja klar, weil sich rsync in deinem PATH befindet. Bitte teste den absoluten Pfad zu rsync.
*/2 * * * * /usr/bin/rsync -av --delete /home/yunus/Schreibtisch/ /home/yunus/Dropbox/Schreibtisch/
Klappt so leider auch nicht
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 )
*/2 * * * * /usr/bin/rsync -av --delete /home/yunus/Schreibtisch/ /home/yunus/Dropbox/Schreibtisch/
So sieht meine crontab jetzt aus. Leider immer noch ohne Erfolg.
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/
Crontab wäre hier nur eine der Möglichkeiten was du nutzen kannst.
CrontabEntweder 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 :
SystemdDafür brauchen wir
- Skript
- Service
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.
https://i.imgur.com/xZL7xvA.png Gab ein Problem. Und wie stelle ich ein, dass das Script reglemäßg ausgeführt wird, alle 3m ?
Das kapier ich nicht. Sorry https://i.imgur.com/5hMLnJN.png . Hab leider Linux nicht so sehr studiert
sudo nano path/toService/Name.service
Was muss ich bei path/toService einsetzen?
Hast Du im Systemd Service angegeben, dass das Script unter yunus ausgeführt werden soll?
Hab alles nochmal gemacht, genau nach Anleitung. Wieder keine Permission leider
Habe nur das gemacht, was du beschrieben hat
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/
Jop. Wenn ich den Befehl ausführe, wird er ausgeführt und alles der Befehl wird korrekt vollzogen.