【问题标题】:Mac OSX 10.9.2, launchd error: "launchctl: Dubious ownership on file (skipping)"Mac OSX 10.9.2,启动错误:“launchctl:文件所有权可疑(跳过)”
【发布时间】:2014-05-08 14:28:49
【问题描述】:

我在以下三个不同位置运行launchctl load 命令时遇到了相同的错误launchctl: Dubious ownership on file (skipping): ~.plist nothing found to load,但它们都不起作用:

sudo launchctl load /Library/LaunchDaemons/updates.novel.plist
sudo launchctl load /Library/LaunchAgents/updates.novel.plist
sudo launchctl load /Users/username/Library/LaunchAgents/updates.novel.plist

下面是我的updates.novel.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>GroupName</key>
   <string>admin</string>
   <key>UserName</key>
   <string>Username</string>
   <key>Debug</key>
   <true/>
   <key>Label</key>
   <string>updates.novel</string>
   <key>ProgramArguments</key>
   <array>
      <string>/Applications/AMPPS/php-5.3/bin/php</string>
      <string>/Applications/AMPPS/www/files/allnovels/novel.php</string>
      <string>--daemon</string>
   </array>
   <key>StandardErrorPath</key>
   <string>/var/log/files/error.1.log</string>
   <key>StandardOutPath</key>
   <string>/var/log/files/error.2.log</string>
   <key>RunAtLoad</key>
   <true/>
   <key>AbandonProcessGroup</key>
   <true/>
   <key>StartCalendarInterval</key>
      <dict>
      <key>Hour</key>
      <integer>14</integer>
      <key>Minute</key>
      <integer>0</integer>
      </dict>
</dict>
</plist>

【问题讨论】:

  • apple.stackexchange.com/questions/3250/…,谷歌搜索“启动可疑所有权”时的最高结果。
  • @zneak,我已经尝试sudo chmod 644 &lt;filename&gt;,但没有成功。
  • 当您尝试使用与文件所属用户不同的用户启动服务时,您会收到可疑的所有权消息。如果你使用sudo,它需要归root所有,但你不需要使用sudo
  • @zneak,非常感谢,你是对的。我把用户名改成root,运行launchctl load /Library/LaunchAgents/updates.novel.plist,终于成功了,干杯,

标签: macos cron osx-mavericks launchd


【解决方案1】:

launchd 服务需要由拥有 plist 文件的用户启动。如果所有者不是 root,则不能使用 sudo 启动服务。

此外,文件的权限必须拒绝除所有者之外的所有用户的写访问权限。

最后,文件必须是常规文件(即不是管道、套接字或其他任何东西)。

【讨论】:

    【解决方案2】:

    man launchctl我们可以阅读:

    请注意,每个用户的配置文件 (LaunchAgent) 必须归加载它们的用户所有。所有系统范围的守护进程 (LaunchDaemons) 必须由 root 拥有。配置文件不能是组可写或全局可写的。出于安全原因,这些限制已经到位。

    launchctl.c 是这样检查的:

    bool path_goodness_check(const char *path, bool forceload) {
    
        if (forceload) {
            return true;
        }
    
        if (sb.st_mode & (S_IWOTH|S_IWGRP)) {
            fprintf(stderr, "%s: Dubious permissions on file (skipping): %s\n", getprogname(), path);
            return false;
        }
    
        if (sb.st_uid != 0 && sb.st_uid != getuid()) {
            fprintf(stderr, "%s: Dubious ownership on file (skipping): %s\n", getprogname(), path);
            return false;
        }
    
        if (!(S_ISREG(sb.st_mode) || S_ISDIR(sb.st_mode))) {
            fprintf(stderr, "%s: Dubious path. Not a regular file or directory (skipping): %s\n", getprogname(), path);
            return false;
        }
    
        if ((!S_ISDIR(sb.st_mode)) && (fnmatch("*.plist", path, FNM_CASEFOLD) == FNM_NOMATCH)) {
            fprintf(stderr, "%s: Dubious file. Not of type .plist (skipping): %s\n", getprogname(), path);
            return false;
        }
    
        return true;
    
    }
    

    换句话说,更正您的 .plist 文件的所有权、权限或路径或强制加载 (-F)。

    【讨论】:

    • 谢谢!在尝试启动 novacom 守护程序时,我在一些旧的 HP TouchPad 驱动程序上遇到了“Not of type .plist”。 launchctl 脚本没有附加 .plist,因此它不会启动。
    猜你喜欢
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 2014-06-26
    • 2015-01-14
    • 1970-01-01
    • 2014-05-12
    • 2016-05-04
    相关资源
    最近更新 更多