Launchctl difference between load and start, unload and stop
TL;DR


You typically want to use launchctl load -w and launchctl unload -w.
start and stop are usually reserved for testing or debugging a job.


Details


launchctl start &lt;label&gt;: Starts the job. This is usually reserved just for testing or debugging a particular job.
launchctl stop &lt;label&gt;: Stops the job. Opposite of start, and it's possible that the job will immediately restart if the job is configured to stay running.





launchctl remove &lt;label&gt;: Removes the job from launchd, but asynchronously. It will not wait for the job to actually stop before returning, so no error handling on this one.





launchctl load &lt;path&gt;: Loads and starts the job as long as the job is not "disabled."
launchctl unload &lt;path&gt;: Stops and unloads the job. The job will still restart on the next login/reboot.





launchctl load -w &lt;path&gt;: Loads and starts the job while also marking the job as "not disabled." The job will restart on the next login/reboot.
launchctl unload -w &lt;path&gt;: Stops and unloads and disables the job. The job will NOT restart on the next login/restart.





  Where do I find the job label for a daemon, is it in the plist file?


Yes, it's in the plist file and it typically matches the filename of the plist file.