Make the file executable:
chmod +x ~/com.script.startCam.sh
Create a file:
<?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.script.startCam</string> <key>Program</key> <string>/Library/Scripts/poweron_cam</string> <key>RunAtLoad</key> <true/> </dict> </plist>
The following example shows a complete job definition with only three keys:
LabelThis key is required for every job definition. It identifies the job and has to be unique for the launchd instance. Theoretically it is possible for an agent to have the same label as a daemon, as daemons are loaded by the root launchd whereas agents are loaded by a user launchd, but it is not recommended.
ProgramThis key defines what to start, in this case a shell script /Users/Me/Scripts/cleanup.sh.
RunAtLoadThis is one of several optional keys specifying when the job should be run, in this case right after it has been loaded.
Now, let’s add it as a Login Hook:
sudo defaults write com.apple.loginwindow LoginHook /usr/local/bin/script.sh
sudo defaults write com.apple.loginwindow LogoutHook /usr/local/bin/script2.sh
sudo defaults delete com.apple.loginwindow LoginHook sudo defaults delete com.apple.loginwindow LogoutHook