Tim's blah blah blah

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.

#Linux #Mac #Photography #Server #Ssh