61

I want to run a unison sync service running in the background whenever I login. But the status code of my agent is 78. I don't know why, I tried some fix posted online, but it just doesn't work.

What's the problem?? below is the plist file for my service.

<?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>syncmyproject</string> <key>StandardOutPath</key> <string>/var/log/syncmyproject.log</string> <key>StandardErrorPath</key> <string>/var/log/syncmyproject.log</string> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> <key>Debug</key> <true/> <key>EnableGlobbing</key> <true/> <key>ProgramArguments</key> <array> <string>/usr/local/bin/unison</string> <string>-auto</string> <string>-batch</string> <string>-repeat watch</string> <string>~/home/project</string> <string>~/project</string> </array> </dict> </plist> 
2
  • 8
    You can grep this file for possible clues as to what's wrong: /var/log/system.log Commented Dec 1, 2016 at 19:52
  • The advice to look at either /var/log/system.log or /var/log/com.apple.xpc.launchd/launchd.log should be the accepted answer. In my case launchctl list returned just "78" and that's it, but launchd.log had a much more detailed error message. Commented Jun 24, 2024 at 14:45

10 Answers 10

71

I read man launchctl, find 78 means function not implemented. It doesn't help much.

Finally I make it work, actually there were errors in the plist, I recommend to install the brew install --cask launchcontrol, which is a gui tool for launchctl, it can help detect errors and trouble shooting.

Sign up to request clarification or add additional context in comments.

13 Comments

Thanks for this. launchcontrol helped solve my issue. For the record I had status 78 and my issue was that my script did not start with an interpreter e,g; #!/bin/sh
For me the problem was, that the log directory was not accessible by the current user.
yep, me too. I had an error in the shebang. This made it difficult to debug since the script performed flawlessly when I executed it, but not when launchd tried to execute it.
An invalid WorkingDirectory can cause a status code of 78 as well.
These days it's brew install --cask launchcontrol for anyone stumbling upon this answer. I've submitted an edit as well.
|
18

I found the error had to do with permissions. I was trying to redirect errors and logs to the /var/log directory which my user is not able to write to. Changing the path to something where my user had proper permissions to r+w fixed it.

Also, be careful when loading your LaunchAgents. Do not use sudo to load a plist if you are in the ~/Library/LaunchAgents directory.

3 Comments

Holy smokes, that was my error too! Changing the logs to a different folder fixes it.
"Be careful when loading your LaunchAgents. Do not use sudo to load a plist if you are in the ~/Library/LaunchAgents directory." Oh my holy goat. This... You are my hero.
On MacOS I need to put the full path to the filename, ie /Users/name/folder/file.log
15

To view a description of all error codes, type

launchctl error <insert numerical error code here>

e.g.:

% launchctl error 77 77: No locks available

Comments

8

[Ran into this problem as well, so documenting what I've found]

"78" is the last exit code of the job you're running. From man launchctl:

With no arguments, list all of the jobs loaded into launchd in three columns. The first column displays the PID of the job if it is run- ning. The second column displays the last exit status of the job. If the number in this column is negative, it represents the negative of the signal which stopped the job. Thus, "-15" would indicate that the job was terminated with SIGTERM. The third column is the job's label. If [label] is specified, prints information about the requested job.

I.e. you need to read the documentation (or source code) for whatever job you're starting. (In my case, mysqld)

It's worth noting that "78" is mentioned as a standard exit code on Linux, indicating a configuration error. So take a look at your job configuration (and error logs?) to see if you have something misconfigured.

3 Comments

in my case I had forgotten to chmod +x the shell script ':)
In my case, the log rotator (newsyslog) wasn't configured to restore the previous owner of the stdout and stderr files, rendering them unwritable to the current user.
my 5 cent is to use /tmp/demo.stderr* as StandardErrorPath value in non-root user mode, but Console.app log does not complain anything about permission.Delete those Standard*Path values in plist make my service pid status return to 0.
5

Here's what caught me: In Mac OS X you can run shell-scripts from command-line even if there's "just the script" in the file. However, when you run them from launchd you have to tell which binary that should run the script. A suppose that when you run from command-line it just uses the shell you are currently in (in my case bash), but when running from launchd there is no "surrounding script". I added

#!/bin/sh 

as the first line in the script file, and then it worked.

3 Comments

Also I had comments as file header before #!, which cause the error. The script should not have any comments before #!.
@dan-bergh-johnsson can you tell me exactly where to put the #!/bin/sh please? Could you please put an example? Thank you
@atreeon The #!/bin/sh must be at the exact beginning of the file. On the first line, not indented. In fact, # and ! must be the first two bytes of the file on disk.
4

In my case, script in <ProgramArguments> is not executable and thus get 78 function not implemented.

2 Comments

This was my issue. Upgraded to Catalina and everything stopped working code 78! Was because Catalina chmod 700 ~/Documents without me knowing.
I can't up vote this enough. You saved me :pray: :bow:
3

Similar to above I was getting a status 78 because I had symlink in my script path. The fix was to use the absolute path.

Comments

2

I got this error while trying to run mono to start a local webserver. Turns out the fix was to not use the mono path given by "which mono" (which is a symlink: /Library/Frameworks/Mono.framework/Versions/Current/Commands/mono) but the actual location of the exe (in my case /Library/Frameworks/Mono.framework/Commands/mono).

Comments

1

I'm keeping getting 78 code for the sake of xml format issue:

At first, My emacs auto reformat my xml like this:

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>user.eric.g.autosyncdropbox.agent</string> <key>ProgramArguments</key> <array> <string>/Users/eric/G/bin/fswatchG.sh</string> </array> <key>KeepAlive</key> <true /> <key>StandardOutPath</key> <string> /Users/eric/.tmp/user.eric.g.autosyncdropbox.out.log</string> <key>StandardErrorPath</key> <string> /Users/eric/.tmp/user.eric.g.autosyncdropbox.error.log</string> </dict> </plist> 

And I was not able to find these two line is returned...

 <string> /Users/eric/.tmp/user.eric.g.autosyncdropbox.out.log</string> <key>StandardErrorPath</key> <string> /Users/eric/.tmp/user.eric.g.autosyncdropbox.error.log</string> 

That was sucks, and absolutely a waste of life...

Comments

1

I was chasing for the status 78 error for a long time.

My LaunchDamon could be started by hand with status 0 , but after a system reboot it has the status 78. Sometimes the daemon was running, sometimes it was not.

Using the app LaunchControl ( which is great btw.) didn't help in this case. There was no output in the standard out and err files.

I could solve the problem by adding a KeepAlive condition to the daemons plist file, referencing a mounted file system where the daemon executable resides.

<key>KeepAlive</key> <dict> <key>PathState</key> <dict> <key>/Volumes/MountedFileSystem</key> <true/> </dict> </dict> 

I hope this tip might help someone.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.