[launchd-dev] General questions on launchd

Scott Haneda talklists at newgeo.com
Mon Jun 1 12:17:03 PDT 2009


Thanks for all the data, very helpful.  So let me test case this, as I  
still have issues, on the most basic of a test.

On Jun 1, 2009, at 11:58 AM, Damien Sorresso wrote:

> On Jun 1, 2009, at 11:29 AM, Scott Haneda wrote:
>> Hello, first post, I have done my best to hit up nabble archives  
>> and see if there are any answers, so far, no luck.  I am on 10.5.
>>
>> Where does one draw the line from stuffing a command into a plist  
>> versus having a simple command call a more complicated script, even  
>> if the script to be called is not that complicated?
>>
>> Example:
>> <dict>
>> 	<key>ProgramArguments</key>
>> 	<array>
>> 		<string>/bin/bash /Users/me/Library/Application\ Support/dir/ 
>> script</string>
>> 	</array>
>> </dict>
>> </plist>
>>
> The structure of ProgramArguments dictates that you specify one  
> argument per array element. While what you have works, it's only  
> because the shell you're targeting understands it. In other words,  
> don't get in the habit. It's a one-time cost to structure your plist  
> appropriately, and Property List Editor makes it easy.

My bad, sorry, that was a hand typed example, and I would have usually  
put arg/array correctly.

>> * How important is it to use full paths to binaries like `echo` and  
>> `ls`, as long as I am sure that I have not mucked with the  
>> environment variables to them?  Are environment variables cleared  
>> in launchd, or do user launchd plists need to have care taken to  
>> make sure an alias bash alias will get in the way?
>>
>> I have never been able to get that to work.  syslog tells me
>> Jun  1 11:02:47 host com.apple.launchd[155] (com.me.foo[19809]):  
>> posix_spawnp("/Users/me/Library/Application Support/dir/ 
>> script", ...): No such file or directory
>> Jun  1 11:02:47 host com.apple.launchd[155] (com.me.ALARM[19809]):  
>> Exited with exit code: 1
>
> launchd uses posix_spawn(2), which will search _PATH_DEFPATH, which  
> is specified as "/usr/bin:/bin". Personally, I try to always use the  
> full path to an executable. It's just good practice.

Ok, thank you, test case so far is:
$cat ~/Library/Application\ Support/launchd-test/tester
#!/bin/bash
echo `date` >> /Users/me/Desktop/launchdtest.txt
echo "this is working" >> /Users/me/Desktop/launchdtest.txt

./tester
$cat ~/Desktop/launchdtest.txt
Mon Jun 1 12:07:41 PDT 2009
this is working

It works, run interactively at least.  I make a launchd item for it.
Stored in ~/Library/LaunchAgents/
-rw-r--r--  1 me  staff  479 Jun  1 12:11 com.me.test.foo.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.$
<plist version="1.0">
<dict>
         <key>Label</key>
         <string>com.me.test.foo</string>
         <key>ProgramArguments</key>
         <array>
                 <string>/bin/bash</string>
                 <string>/Users/me/Library/Application\ Support/ 
launchd-test/tester</string>
         </array>
         <key>RunAtLoad</key>
         <true/>
         <key>StartInterval</key>
         <integer>10</integer>
</dict>
</plist>

Now, tail the log file, nothing, look at the syslog, every 10 seconds:
Jun  1 12:15:11 macbook com.me.test.foo[1010]: /bin/bash: /Users/me/ 
Library/Application\ Support/launchd-test/tester: No such file or  
directory
Jun  1 12:15:11 macbook com.apple.launchd[123]  
(com.me.test.foo[1010]): Exited with exit code: 127

I will look into the "WorkingDirectory" now, but I am stumped as to  
why this should not work as is.  Thanks again for the pointers.
-- 
Scott * If you contact me off list replace talklists@ with scott@ *



More information about the launchd-dev mailing list