0

I am building a launchctl service which can run a java service. I am able to create launchctl service with root user and test start/stop/status/automatic start at reboot use cases.

I am struggling with running same launchctl service with non root user(ec2-user in my case)

My plist file looks like below

<?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>siem</string>
  <key>ProgramArguments</key>
  <array>
    <string>java</string>
    <string>-jar</string>
    <string>/Users/ec2-user/siem.jar</string>
  </array>
  <key>RunAtLoad</key>
  <true/> <!-- run the program at login -->
  <key>KeepAlive</key>
  <true/> <!-- run the program again if it terminates -->
  <key>WorkingDirectory</key>
  <string>/Users/ec2-user</string>
   <key>StandardErrorPath</key>
   <string>/tmp/mycommand.err</string>
   <key>StandardOutPath</key>
   <string>/tmp/mycommand.out</string>
</dict>
</plist>

I have tried various steps to run the above service with ec2-user. UID for ec2-user is 501.

ec2-user@ip-172-31-30-212 ~ % launchctl bootstrap gui/501 ~/Library/LaunchDaemons/siem.plist
Bootstrap failed: 125: Unknown error: 125

Verified the content of plist file

ec2-user@ip-172-31-30-212 ~ % plutil ~/Library/LaunchDaemons/siem.plist
/Users/ec2-user/Library/LaunchDaemons/siem.plist: OK

Tried bootstraping service with user

ec2-user@ip-172-31-30-212 ~ % launchctl bootstrap user/501 ~/Library/LaunchDaemons/siem.plist
Bootstrap failed: 5: Input/output error

All of the above errors are not verbose and doesn't seem to find any way.

My goal : I want to run launchctl service with non root user.

Environment Details:

OS : macOS on AWS EC2 Instance

macOS Version : BigSur and Monterey

Update 1:

Checked system logs

Nov 26 17:51:23 ip-172-31-30-212 com.apple.xpc.launchd[1] (siem[2159]): Service could not initialize: 20G224: xpcproxy + 23787 [839][86D1F823-583D-36B7-A047-55971A034143]: 0xd
Nov 26 17:51:23 ip-172-31-30-212 com.apple.xpc.launchd[1] (siem.label[2160]): Service could not initialize: 20G224: xpcproxy + 23787 [839][86D1F823-583D-36B7-A047-55971A034143]: 0xd
Nov 26 17:51:23 ip-172-31-30-212 com.apple.xpc.launchd[1] (siem[2159]): Service exited with abnormal code: 78
Nov 26 17:51:23 ip-172-31-30-212 com.apple.xpc.launchd[1] (siem): Service only ran for 0 seconds. Pushing respawn out by 10 seconds.
Nov 26 17:51:23 ip-172-31-30-212 com.apple.xpc.launchd[1] (siem.label[2160]): Service exited with abnormal code: 78
Nov 26 17:51:23 ip-172-31-30-212 com.apple.xpc.launchd[1] (siem.label): Service only ran for 0 seconds. Pushing respawn out by 10 seconds.
2
  • 1
    You might need the full java path. Been a while since I checked which path it uses by default, but like cron, launchdaemons don't get a lot. check this answer: stackoverflow.com/questions/32927956/…
    – Alex
    Nov 27, 2021 at 22:57
  • Gave the full path of java also, It is not working for me.
    – SRJ
    Nov 28, 2021 at 6:03

2 Answers 2

4

Used tool LaunchControl to debug the problem. I recommend to install the brew cask install launchcontrol, which is a gui tool for launchctl, it can help detect errors and trouble shooting.

In my case, there were the following issues

  • StandardOutPath and StandardErrorPath were given where my user had no write permissions with it.
  • I started my service first with the root user thus service created logs location. Then I started the same service with another non-root user and as logs location were already created, the non-root user had no permission there to write on that.

The reason it took some time to figure out the above issues is the very poor error logging provided by macOS.

0

You need to edit the plist.

You need the key UserName

e.g.

    <key>UserName</key>
    <string>ec2-user</string>

For more see https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatingLaunchdJobs.html#//apple_ref/doc/uid/10000172i-SW7-BCIEDDBJ

1
  • I have added that and ran commands and it is not working ec2-user@ip-172-31-30-212 ~ % launchctl load -w ~/Library/LaunchDaemons/siem.plist Load failed: 5: Input/output error and ec2-user@ip-172-31-30-212 ~ % launchctl bootstrap gui/501 ~/Library/LaunchDaemons/siem.plist Bootstrap failed: 5: Input/output error
    – SRJ
    Nov 26, 2021 at 17:44

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .