macos – 如何将OSX launchd plist的参数添加到管道输出到日志文
发布时间:2020-12-16 01:56:18 所属栏目:安全 来源:网络整理
导读:我已经尝试了很多不同的变化,但却无法让它发挥作用. 我有一个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.dtd"plist version="1.0"dict keyLabel/k
我已经尝试了很多不同的变化,但却无法让它发挥作用.
我有一个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.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.ilium007.handbrake</string> <key>ProgramArguments</key> <array> <string>/bin/bash</string> <string>/Users/ilium007/support/scripts/handbrake/handbrake.sh >> /Users/ilium007/support/scripts/handbrake/logs/handbrake_encode.log</string> <!--<string>>></string>--> <!--<string>/Users/ilium007/support/scripts/handbrake/logs/handbrake_encode.log</string>--> </array> <key>RunAtLoad</key> <true/> <key>StartInterval</key> <integer>60</integer> </dict> </plist> 请注意那里的评论. 我想将handbrake.sh脚本的输出管道传输到日志文件,并尝试这样做,但在OSX上的system.log中不断出现“无此文件”错误. Nov 3 18:03:54 macmini com.ilium007.handbrake[15348]: /bin/bash: /Users/ilium007/support/scripts/handbrake/handbrake.sh >> /Users/ilium007/support/scripts/handbrake/logs/handbrake_encode.log: No such file or directory Nov 3 18:03:54 macmini com.apple.launchd.peruser.501[162] (com.ilium007.handbrake[15348]): Exited with code: 127 如果我将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.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.ilium007.handbrake</string> <key>ProgramArguments</key> <array> <string>/bin/bash</string> <string>/Users/ilium007/support/scripts/handbrake/handbrake.sh</string> <string>>></string> <string>/Users/ilium007/support/scripts/handbrake/logs/handbrake_encode.log</string> </array> <key>RunAtLoad</key> <true/> <key>StartInterval</key> <integer>60</integer> </dict> </plist> 我想通过launchd运行的命令是: /Users/ilium007/support/scripts/handbrake/handbrake.sh >> /Users/ilium007/support/scripts/handbrake/logs/handbrake_encode.log 日志文件中没有任何内容.但是如果我从终端运行该命令,我会在日志中获取内容.任何帮助,将不胜感激. 解决方法
>>是一个shell运算符,而不是程序参数,并且launchd不会通过shell传递它的命令(除非你强制它,如在@Lauri的回答中).但是launchd确实有自己重定向stdout的选项:
<key>StandardOutPath</key> <string>/Users/ilium007/support/scripts/handbrake/logs/handbrake_encode.log</string> 请注意,它会自动附加(相当于>>,而不是>).您还可以使用StandardErrorPath键重定向stderr.你不能做的一件事就是使用?(如?/ support / scripts / handbrake / logs / handbrake_encode.log) – 这也是launchd不能模拟的shell特性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |