Eine frohe Adventszeit wünscht Apfeltalk

Warum funktioniert crontab nicht?

rcsapo

James Grieve
Mitglied seit
06.11.05
Beiträge
136
Liebe Macsperten,

Ich arbeite auf einem Mac mit OS 12.4 und zsh Version 5.8.1. Ich würde gerne mit rsync einen Ordner auf meiner lokalen Festplatte mit einer externen Platte synchronisieren (natürlich nur, wenn diese angeschlossen ist). Dafür habe ich das kleine Script imct_sync.sh geschrieben, das ich ausführbar gemacht und in /usr/local/bin abgelegt habe.
Code:
#!/bin/zsh
if \[ -d /Volumes/M_W_E \]; then
        rsync -avWe ssh --delete-before /Users/myname/Desktop/source/ /Users/myname/Desktop/target/
fi
Die Verzeichnisse in diesem Script sind natürlich nur für Testzwecke angelegt. Wenn ich es direkt ausführe, funktioniert es einwandfrei. Jetzt hätte ich gerne, dass das Script automatisch bei jedem Neustart ausgeführt wird. Dafür habe ich mit crontab -e das Folgende eingegeben:
Code:
@reboot /usr/local/bin/imct_sync.sh
Ich erhalte zwar keine Fehlermeldungen aber ausgeführt wird das Script dennoch nicht. Was mache ich falsch?

Vielen Dank und schöne Grüße,
Robert
 

m4371n

Bismarckapfel
Mitglied seit
27.12.20
Beiträge
144
Wird es nicht ausgeführt, oder ist vielleicht das Volume zum Ausführungszeitpunkt noch nicht gemounted?
 
  • Like
Wertungen: rcsapo

Bozol

Goldparmäne
Mitglied seit
05.01.04
Beiträge
559
Du könntest Dein Script mal durch LaunchControl schicken um zu sehen wo der Fehler liegen könnte.


LaunchControl

EDIT: sorry, bin irgendwie von crontab auf launchd gekommen... :(
 
Zuletzt bearbeitet:

ottomane

Golden Noble
Mitglied seit
24.08.12
Beiträge
16.038
Eigentlich macht man das unter macOS besser mit einem Launch Daemon und nicht mit einem cronjob. Apple ersetzt dessen Funktionalität durch launchd.

Um das jetzige Problem zu lokalisieren, kannst du dir cronjob.log mal ansehen. Dort müsste es ja eine Fehlermeldung geben.

Vermutlich hat cron keinen Festplattenzugriff. Den musst du natürlich erst erlauben in den Systemeinstellungen. cron liegt unter /usr/sbin.
 
  • Like
Wertungen: Wuchtbrumme

rcsapo

James Grieve
Mitglied seit
06.11.05
Beiträge
136
Wird es nicht ausgeführt, oder ist vielleicht das Volume zum Ausführungszeitpunkt noch nicht gemounted?
Vielen Dank für die Antwort. Das Laufwerk ist gemountet. Ich kann das Script ja manuell problemlos durchlaufen lassen.

Du könntest Dein Script mal durch LaunchControl schicken um zu sehen wo der Fehler liegen könnte.


LaunchControl

EDIT: sorry, bin irgendwie von crontab auf launchd gekommen... :(
Kein Problem - mir ist bewusst, dass launchd wohl das Mittel der Wahl ist. Ich habe damit nur keine Erfahrung und crontab erscheint mir wesentlich einfacher.

Eigentlich macht man das unter macOS besser mit einem Launch Daemon und nicht mit einem cronjob. Apple ersetzt dessen Funktionalität durch launchd.

Um das jetzige Problem zu lokalisieren, kannst du dir cronjob.log mal ansehen. Dort müsste es ja eine Fehlermeldung geben.

Vermutlich hat cron keinen Festplattenzugriff. Den musst du natürlich erst erlauben in den Systemeinstellungen. cron liegt unter /usr/sbin.
Erstmal vielen Dank für die Hinweise. Ich bin mir bewusst, dass crontab eher ein Auslaufmodell ist. Ich habe mich gestern sowohl mit launchd als auch crontab beschäftigt und Ersteres erschien mir deutlich aufwändiger (.plist-Datei usw.). Daher wollte ich es mit crontab versuchen.

Was die cron-Logs anbelangt, zeigt
Code:
log show --process cron
fortlaufend folgende Meldungen:
Code:
2022-08-11 14:58:45.162734+0200 0x5fd      Activity    0x780                275    0    cron: (libsystem_info.dylib) Retrieve User by Name
2022-08-11 14:58:45.203377+0200 0x634      Activity    0x7a0                284    0    cron: (libsystem_info.dylib) Retrieve User by Name
2022-08-11 14:58:45.204230+0200 0x634      Activity    0x7a1                284    0    cron: (libsystem_info.dylib) Retrieve User by Name
2022-08-11 14:58:45.204423+0200 0x634      Activity    0x7a2                284    0    cron: (libsystem_info.dylib) Resolve user group list

Wie genau könnte ich denn cron vollen Zugriff auf meine Platte gewähren? Unter System Preferences / Security & Privacy / Full Disk Access scheint cron bei mir nicht auf.

Nochmals vielen Dank!
Robert

Wie genau könnte ich denn cron vollen Zugriff auf meine Platte gewähren? Unter System Preferences / Security & Privacy / Full Disk Access scheint cron bei mir nicht auf.
Zumindest das konnte ich mir mit Googles Hilfe selbst beantworten. Simples Drag & Drop: https://osxdaily.com/2020/04/27/fix-cron-permissions-macos-full-disk-access/. Ich teste mal, ob das was gebracht hat und geb Bescheid…

Also Erfolg… Ich habe einerseits cron Festplattenzugriff gewährt und andererseits die Sync-Zeiten auf einmal stündlich geändert. Vielleicht war das externe Laufwerk just im Moment, in dem cron das Script gestartet hat (unmittelbar nach dem Neustart), tatsächlich noch nicht gemountet. So funktioniert's jetzt. Vielen Dank für die Hilfe!
Code:
0 * * * * /usr/local/bin/imct_sync.sh
 
Zuletzt bearbeitet: