OSX Cron 导致以下错误:无法设置 Mach 任务特殊端口 9:(os/kern)无访问权限

OSX Cron 导致以下错误:无法设置 Mach 任务特殊端口 9:(os/kern)无访问权限

有没有什么办法可以解决 Mac OSX system.log 文件中显示的错误?或者说这个错误意味着什么?

我有以下每分钟运行一次的 cron 作业:

* * * * * cd /Library/[...]/report/ && nice -n 15 /usr/local/php5/bin/php -f report_generator.php > /dev/null 2>&1

互联网上的搜索提到了注释掉 cron 作业,但我做不到这一点。大多数Google 的搜索结果也没有确切指出该错误的实际含义。

完整错误如下:

Jul  2 14:50:00 xserve2 com.apple.launchd[1] (0x10c3f0.cron[46328]): Could not setup Mach task special port 9: (os/kern) no access

Mac OSX 10.5

答案1

我知道这不能完全解决原始问题但希望可以告诉我们该问题是否是错误launchd还是其他问题。

您是否尝试过删除该cron作业并将其重新设置为适当的launchd作业?launchd应该运行该cron作业,但听起来您可能遇到了错误。

您可以launchd使用 GUI 创建作业,例如林贡如果您愿意,也可以自己制作 .plist。

示例 .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>test.dood.123</string>
    <key>ProgramArguments</key>
    <array>
        <string>cd</string>
        <string>/Library/REMOVED/DIRS/report/</string>
        <string>&amp;&amp;</string>
        <string>nice</string>
        <string>-n</string>
        <string>15</string>
        <string>/usr/local/php5/bin/php</string>
        <string>-f</string>
        <string>report_generator.php</string>
        <string>&gt;</string>
        <string>/dev/null</string>
        <string>2&gt;&amp;1</string>
    </array>
    <key>StartInterval</key>
    <integer>60</integer>
</dict>
</plist>

从我的谷歌搜索来看,这听起来像是launchd运行cron作业时的一个错误。资料来源:1

开始间隔将会简单地从上次运行该作业开始运行这么多秒。 开始日历间隔将允许您在设定的时间运行它,而不是<key>StartInterval</key>在上面的示例中使用以下命令:

仅在凌晨 3:15 运行

 <key>StartCalendarInterval</key>
 <dict>  
     <key>Hour</key>
     <integer>3</integer>
     <key>Minute</key>
     <integer>15</integer>
</dict>

每 5 分钟运行一次 - StartCalendarInterval 带有一个数组。(我不知道有更好的方法可以写出来,所以我希望有人能详细说明一下)

 <key>StartCalendarInterval</key>
 <array>
     <dict>
         <key>Minute</key>
         <integer>0</integer>
     </dict>
     <dict>
         <key>Minute</key>
         <integer>5</integer>
     </dict>
     <dict>
         <key>Minute</key>
         <integer>10</integer>
     </dict>
     <dict>
         <key>Minute</key>
         <integer>15</integer>
     </dict>
     <dict>
         <key>Minute</key>
         <integer>20</integer>
     </dict>
     <dict>
         <key>Minute</key>
         <integer>25</integer>
     </dict>
     <dict>
         <key>Minute</key>
         <integer>30</integer>
     </dict>
     <dict>
         <key>Minute</key>
         <integer>35</integer>
     </dict>
     <dict>
         <key>Minute</key>
         <integer>40</integer>
     </dict>
     <dict>
         <key>Minute</key>
         <integer>45</integer>
     </dict>
     <dict>
         <key>Minute</key>
         <integer>50</integer>
     </dict>
     <dict>
         <key>Minute</key>
         <integer>55</integer>
     </dict>
 </array>

有关详细信息,请参阅launchd 的文档手册页

答案2

系统日志中的条目似乎是由 launchd 应用程序本身创建的,cron 作业的(子)子进程用括号括起来。该条目与任何特定的 cron 作业无关,而是发生在每一个任何 cron 作业运行的场合:我有每天运行一次的作业和每 5 分钟运行一次的作业,并带有日志条目(无法设置 Mach 任务专用端口 9:(os/kern)无访问权限) 每次都会出现此问题。问题一定是运行 cron 作业的过程的一部分(在该 cron 作业之外),并且可能位于 cron 进程的某个 lib 文件中,例如“/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation”。问题不太可能是 launchd 的一部分,因为它仅在调用 cron 时发生。

尽管可能很复杂,但停止日志条目并允许作业运行的最佳方法是省去中间人 - cron - 并直接从 launchd 运行作业。如何实现这一点的示例有很多(请参阅上文作为开始)!

答案3

达里尔,

如果不知道该脚本的作用(或者它是谁的 crontab),我建议您首先尝试以该用户的身份从命令行运行它。

乍一看,这似乎是权限问题。您能提供更多信息吗?

进一步搜索后,我们发现了两个关于该主题的论坛帖子:

http://discussions.apple.com/thread.jspa?threadID=1224189&start=0&tstart=0

http://discussions.apple.com/thread.jspa?messageID=5666826砊

希望有帮助!

相关内容