Table of Contents
- macOS: crontab, launchd, and launchctl
- Running a simple command every minute with Mac launchd
- 1) Move to the $HOME/Library/LaunchAgents directory
- 2) Create a Mac plist file to describe your job
- 3) Tell MacOS about your Mac plist launchd file
- 4) How Mac launchd works with system reboots
- An important note about root and sudo access
- MacOS launchd, launchctl, and plist resources
- MacOS startup jobs: cron and crontab, launchd and launchctl
MacOS crontab FAQ: How do I run a Unix job (or shell script) through the MacOS crontab facility? I keep trying to edit my Mac crontab file, but my Mac won't save my crontab changes, or run my program.Back to top
macOS: crontab, launchd, and launchctl
Way back when (~2012-2014), I found that the Mac
crontab command was deprecated on MacOS, and the Apple documentation encouraged you to use their launchd facility. Here’s a blurb from Apple's
crontab man page:
“Darwin note: Although cron(8) and crontab(5) are officially supported under Darwin, their functionality has been absorbed into launchd(8), which provides a more flexible way of automatically executing commands. See launchctl(1) for more information.”
Here’s an example that shows how to find the largest files under a directory on MacOS and Linux/Unix systems.
A du/sort command to show the largest files under a directory on Mac OS X
The Unix/Linux command that worked for me on my MacOS system is this:
$ du -a * | sort -r -n | head -10
du is the disk usage command, and the
-a flag says, “Display an entry for each file in a file hierarchy.” Then I use the
sort command to sort the
du output numerically and in reverse. After that,
head -10 shows only the first ten lines of output. In the Music folder on my Mac the command and output look like this:
In this article I assume that you already know at least a little bit about how to use AppleScript, and just want to know how to trigger a MacOS notification. At the end of the tutorial I show how to invoke the AppleScript code using Scala and Java.
If you want to copy the current macOS Terminal path to the clipboard, you can do it with this simple command:
$ pwd | pbcopy
pwd prints the path to STDOUT, and
pbcopy reads that and copies it to the macOS clipboard. Once the path is on the clipboard you can paste it into your other applications.
Of course you can also create an alias, like this:
alias path="pwd | pbcopy"
If you ever need to copy text (or a text file) from the MacOS Terminal to the Mac clipboard, I can confirm that the macOS
pbcopy command works. It reads from STDIN and copies the text to the clipboard, so commands like these work:
$ echo "foo bar baz" | pbcopy $ cat /etc/passwd | pbcopy
As a quick note, I haven’t tried to log into one of my GoDaddy websites in several months, and when I tried to log in just now I got this macOS ssh error message:
Unable to negotiate with <ip-address here> port 22: no matching host key type found. Their offer: ssh-dss
I don’t have much time to explain this today, but ... if you want to see how to use the
sed command on a Mac OS X (macOS) system to search for newline characters in the input pattern and replace them with something else in the replacement pattern, this example might point you in the right direction.
I haven’t been blown away by MacOS (nee OS X) in quite some time, and the latest MacBook design seems to have annoyed even more developers. A good thing about this is that it got me looking into Qubes OS, “a reasonably secure operating system.”
Apple’s philosophy of “we design the hardware and software” works well when people like your work, but when people don’t like your design it’s easy to lose customers.
As a “note to self,” I wrote two more Textmate commands yesterday, one to capitalize each word in a selection of words, and another to convert a CSV list of words to a simple list. Here’s the source code for the Capitalize command:
#!/bin/sh perl -ne 'print ucfirst $_'
$_ portion of that Perl command isn’t required, but I include it as a reminder to myself about how Textmate commands and snippets work.
Here’s the source code for my Textmate command that uses the Unix
tr command to convert a CSV list of words (such as a paragraph of comma-separated words) into a simple list of words:
#!/bin/sh tr , "\n"
As you can see, those commands are fairly simple. If you know Unix/Linux and then know a little about how to write Textmate commands, you can usually get it to do what you want. I like that you can use any Mac/Unix programming language or tool to solve the problem at hand.