Keep tailscale up on macOS with a LaunchAgent
2025-02-05 tailscale 186 words 1 min
A LaunchAgent that reruns tailscale up every 30 minutes, so remote access to my Mac never silently drops.
Tailscale makes it easy to connect all my devices. (I have too many).
Sometimes I intentionally disconnect tailscale temporarily. For example, I block bad traffic on all my devices using nextDNS.
If I’m controlling my mac remotely, that’s not an option… unless I ensure that taiscale periodically reconnects.
Which I’ve done with this script: It runs tailscale up every 30 minutes via LaunchAgent on macOS.
1 • Create a script that ensures the tailscale app is running
mkdir -p ~/.scripts
cat << 'EOF' > ~/.scripts/tailscale-up
#!/bin/sh
open -a Tailscale
/Applications/Tailscale.app/Contents/MacOS/Tailscale up
EOF
chmod +x ~/.scripts/tailscale-up Next, we’ll create the LaunchAgent that runs this script automatically.
2 • Create a LaunchAgent to run the script
UP_INTERVAL=1800
cat << EOF > "$HOME/Library/LaunchAgents/com.tailscale.up.plist"
<?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>com.tailscale.up</string>
<key>ProgramArguments</key>
<array>
<string>${HOME}/.scripts/tailscale-up</string>
</array>
<key>StartInterval</key>
<integer>${UP_INTERVAL}</integer>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
EOF This looks ugly but I did it for you dear reader, because we write better documentation when we make them easy to use. Just copy+paste :)
On Linux, you might do this with systemd.