Running a nightly backup script on MacOS
I want to run a backup script nightly on my MacBook to store photos to my server. Based on Scheduling Recurring Tasks on macOS Using Launchd (serghei.pl).
LaunchAgent config ¶
Create LaunchAgent config, ensure log files exist and are writable by current user.
sudo install -m 660 -g admin /dev/null /var/log/server_backup.log
sudo install -m 660 -g admin /dev/null /var/log/server_backup-error.log
cat << EOF > ~/Library/LaunchAgents/org.vanwerkhoven.server_backup.plist
...
EOF
with contents:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>org.vanwerkhoven.server_backup</string>
<key>ProgramArguments</key>
<array>
<string>/Users/tim/bin/server_backup.sh</string>
</array>
<key>Nice</key>
<integer>5</integer>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>22</integer>
<key>Minute</key>
<integer>00</integer>
</dict>
<key>StandardOutPath</key>
<string>/var/log/server_backup.log</string>
<key>StandardErrorPath</key>
<string>/var/log/server_backup-error.log</string>
</dict>
</plist>
Test & install config ¶
# Check script
plutil -lint ~/Library/LaunchAgents/org.vanwerkhoven.server_backup.plist
# /Users/tim/Library/LaunchAgents/org.vanwerkhoven.server_backup.plist: OK
Deploy & monitor ¶
# Enable
launchctl enable gui/$(id -u)/org.vanwerkhoven.server_backup
launchctl disable gui/$(id -u)/org.vanwerkhoven.server_backup
# Start
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/org.vanwerkhoven.server_backup.plist
# Check
launchctl print gui/$(id -u)/org.vanwerkhoven.server_backup
Debugging ¶
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.example.server_backup.plist
Bootstrap failed: 5: Input/output error
Try re-running the command as root for richer errors.
Happens when you run bootstrap twice. Solution: ignore or first run bootout then run bootstrap again.