Desk log · 584 titles

Mac software news, brief and clear


Lingon 10 program icon
Mac Apps

Lingon 10 10.3 Mac

Updated · Filed by Rosa Delgado

Download (16 MB) Earlier builds

From the photo desk

Relaunch-on-failure is where it clicked for me. A script that keels over at 3 a.m. comes right back up, no babysitting required. That single checkbox turns Lingon 10 from a task timer into a quiet insurance policy for background work.

Job — a task you want macOS to run: an app, a shell script, a Shortcut, or a flat command.

Agent — a job that runs under your user account, visible when you’re logged in. Good for clipboard helpers and menu-bar utilities.

Daemon — a job that runs as root, even when nobody is logged in. Used for server processes, cleanup scripts, and system-level maintenance.

Schedule — the when. A single date, a repeating interval, or a custom calendar pick across multiple dates.

Startup item — a job that fires exactly once, right at login. Lingon exposes the launchd knobs that Apple hides, so you can tweak load order and environment variables directly.

Browse leftover launch agents before you build anything new

Open the app and resist the urge to build a dozen jobs at once. The sidebar lists existing launchd agents and daemons already on your Mac, grouped by location. Spend ten minutes browsing them. You will spot entries left behind by software you uninstalled years ago — Lingon flags them with a yellow warning triangle and a note about a missing executable path.

Delete dead entries first. Select one, click the minus button, and confirm. It cleans up the corresponding plist file instantly. Next, pick one task you currently perform by hand every day — opening a notes file at 9 a.m., say — and write that single job. Run it once from the menu bar to confirm it behaves. Let it fire on schedule the following morning. After two days of trouble-free runs, add a second job. Build trust slowly.

Enable the menu bar icon in preferences. Right-click it to see your three most recently triggered jobs; Option-click any job to run it immediately without opening the main window. For scripts still under development, check the notification box so Lingon pings you every time the job completes. It helps catch silent failures before they become habits.

Workflow: keep a local dev server alive

A local Node.js API server processes image uploads overnight and sometimes exits after a spike in memory pressure. Here is how to set up a daemon that starts it at boot and restarts it on failure, logged for later inspection.

In Lingon, click the plus button and choose New Daemon. Name it com.yourname.image-worker. In the Command field, point it at the Node binary — /usr/local/bin/node — and add the script path as an argument: /Users/yourname/Scripts/worker.js. Under the Schedule tab, select Run at startup. Switch to the Advanced tab and tick Restart on failure. Set Throttle interval to 60 seconds so a rapidly crashing script does not hammer launchd.

Open the Logging section and redirect standard output and error to a known path, such as /tmp/worker-out.log and /tmp/worker-error.log. Save the job and enter your admin password when prompted — daemons require root. Launch it once from the toolbar to confirm the process appears in Activity Monitor. Kill the process from Activity Monitor deliberately. Within a minute, Lingon has relaunched it. Check the logs to verify the restart was recorded.

If the server needs to bind to port 443, add a LocalOnlyNetwork key in the Advanced tab set to false; otherwise macOS may block the socket. This small adjustment saves half an hour of head-scratching later.

The helper idles at 18 MB RAM and zero CPU on M1

Lingon itself sits idle after saving a job. Its background helper consumes roughly 18 MB of RAM and zero CPU on an M1 Mac running macOS 14.4 — negligible compared to the processes it manages. Saving a new plist writes to disk and signals launchd within a fraction of a second; the jobs panel refreshes immediately.

Jobs launched through Lingon inherit the performance characteristics of whatever they run. The scheduler adds no measurable latency. A script set to fire every five minutes drifted by an average of 1.2 seconds across a 24-hour test, well within launchd's documented tolerance. Restart-on-failure triggers within the throttle interval you specify; the daemon checks the process table periodically, not in real time, so expect a few seconds of gap between a crash and the relaunch.

One stability note: editing a running daemon's plist while the job is active can cause launchd to ignore the update. Stop the job first, edit, then restart. Lingon warns you about this with an inline banner, but it is easy to click through. On two occasions while testing, a malformed environment variable entry in the Advanced tab produced an error on save rather than a cryptic launchctl rejection — Lingon catches syntax problems the command line would silently swallow.

Version
10.3
Download
16 MB
Developer
Peter Borg Apps
Languages
English
Activation
Not required
Compatibility
macOS 14 or later
Architecture
Apple Silicon, Intel 64-bit

Questions readers asked

Yes. The Keep Alive option tells launchd to relaunch a job immediately after it exits unexpectedly, which covers scripts and command-line tools that terminate with an error.

It does. You can create and edit daemons that run as the root user, so scheduled system maintenance or server tasks keep working even with no user logged in.

Letters to the desk 0

Sign in or open a desk account to write a letter.

No letters on this brief yet. They are read before they run.

More in Mac Apps

The whole section