129 lines
2.8 KiB
Markdown
129 lines
2.8 KiB
Markdown
|
A MacOS specific version of a [cron](obsidian://open?vault=enter&file=Coding%20Tips%20(Classical)%2FTerminal%20Tips%2FShells%2FComputers%20(operating%20system)%2FLinux%2FCrontab) that automates scripts and programs.
|
|||
|
|
|||
|
For the `man` page for `launchctl`, please visit [here](https://ss64.com/osx/launchctl.html).
|
|||
|
|
|||
|
In computing, **launchd**, a unified operating system service management framework, starts, stops and manages daemons, applications, processes, and scripts in macOS. It was introduced with Mac OS X Tiger and is licensed under the Apache License —Wikipedia. For more tips with launchd please head [here](https://www.maketecheasier.com/use-launchd-run-scripts-on-schedule-macos/).
|
|||
|
|
|||
|
The official source is found [here](https://launchd.info/). My version of LaunchControl for GUI troubleshooting is found [here](https://soma-zone.com/download/).
|
|||
|
|
|||
|
---
|
|||
|
|
|||
|
Here are some helpful tips;
|
|||
|
|
|||
|
View Services
|
|||
|
```
|
|||
|
sudo launchctl list
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
without Sudo
|
|||
|
```
|
|||
|
$ sudo launchctl list | grep ssh
|
|||
|
- 0 com.openssh.sshd
|
|||
|
|
|||
|
$ launchctl list | grep ssh
|
|||
|
3521 0 com.openssh.ssh-agent
|
|||
|
```
|
|||
|
|
|||
|
Particular Service details
|
|||
|
|
|||
|
```
|
|||
|
$ sudo launchctl list com.openssh.sshd
|
|||
|
{
|
|||
|
"Wait" = false;
|
|||
|
"Sockets" = {
|
|||
|
"Listeners" = (
|
|||
|
file-descriptor-object;
|
|||
|
file-descriptor-object;
|
|||
|
);
|
|||
|
};
|
|||
|
"LimitLoadToSessionType" = "System";
|
|||
|
"StandardErrorPath" = "/dev/null";
|
|||
|
"Label" = "com.openssh.sshd";
|
|||
|
"inetdCompatibility" = true;
|
|||
|
"OnDemand" = true;
|
|||
|
"LastExitStatus" = 0;
|
|||
|
"Program" = "/usr/libexec/sshd-keygen-wrapper";
|
|||
|
"ProgramArguments" = (
|
|||
|
"/usr/sbin/sshd";
|
|||
|
"-i";
|
|||
|
);
|
|||
|
};
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
Stop and start service:
|
|||
|
```
|
|||
|
sudo launchctl stop com.openssh.sshd
|
|||
|
|
|||
|
sudo launchctl start com.openssh.sshd
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
Service definition via print:
|
|||
|
```
|
|||
|
sudo launchctl print system/com.openssh.sshd
|
|||
|
```
|
|||
|
|
|||
|
|
|||
|
Loading Services
|
|||
|
|
|||
|
```
|
|||
|
# load
|
|||
|
sudo launchctl load /System/Library/LaunchDaemons/ssh.plist
|
|||
|
|
|||
|
# enable
|
|||
|
sudo launchctl enable system/com.openssh.sshd
|
|||
|
|
|||
|
# disable
|
|||
|
sudo launchctl disable system/com.openssh.sshd
|
|||
|
|
|||
|
# unload
|
|||
|
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
|
|||
|
```
|
|||
|
|
|||
|
via [Rakesh](https://rakhesh.com/mac/macos-launchctl-commands/)
|
|||
|
|
|||
|
---
|
|||
|
### More things to test with Launchd
|
|||
|
|
|||
|
- Check that the script is an executable
|
|||
|
```
|
|||
|
```bash
|
|||
|
chmod +x /Library/Scripts/com.apple.restart.sh
|
|||
|
```
|
|||
|
|
|||
|
- enable the full path to the script
|
|||
|
```
|
|||
|
```bash
|
|||
|
#!/bin/bash
|
|||
|
/sbin/shutdown -r now
|
|||
|
```
|
|||
|
|
|||
|
Found by
|
|||
|
```
|
|||
|
which shutdown
|
|||
|
|
|||
|
output:
|
|||
|
|
|||
|
/sbin/shutdown
|
|||
|
```
|
|||
|
|
|||
|
Ensure that the output is ACII file and not RTF or Pages or MS-Word
|
|||
|
```
|
|||
|
file /Library/Scripts/com.apple.restart.sh
|
|||
|
|
|||
|
output:
|
|||
|
/Library/Scripts/com.apple.restart.sh: Bourne-Again shell script text executable, ASCII text
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
Create a redirect for outputs:
|
|||
|
```
|
|||
|
<key>StandardOutPath</key>
|
|||
|
<string>/tmp/com.apple.restart.stdout</string>
|
|||
|
<key>StandardErrorPath</key>
|
|||
|
<string>/tmp/com.apple.restart.stderr</string>
|
|||
|
```
|
|||
|
|
|||
|
A great launchd blog [post on here too. ](https://ellismin.com/2020/03/launchd-1/)
|