【问题标题】:Building project from cron task从 cron 任务构建项目
【发布时间】:2012-01-27 21:15:35
【问题描述】:

当我使用“xcodebuild”命令从终端构建项目时,我成功了,但是当我尝试从 cron 任务运行相同的脚本时,我收到错误 “代码签名错误:身份 '****' 与默认钥匙串中的任何有效证书/私钥对不匹配”

我认为问题在于 crontab 实用程序的设置和权限,似乎 crontab 没有看到我的钥匙串

谁能给我提供终端命令如何让我的钥匙串对 crontab 可见

【问题讨论】:

    标签: build cron task xcodebuild


    【解决方案1】:

    我在尝试通过 cron 每晚构建时遇到了类似的问题。我发现的唯一解决方案是在 /Library/LaunchDaemons/ 中创建一个 plist 并通过 launchctl 加载它。必要的关键是“SessionCreate”,否则您将很快遇到与尝试使用 cron 时遇到的问题类似的问题——即您的用户 login.keychain 对进程不可用。 “SessionCreate”与“su -l”类似(据我所知)它模拟登录,因此您期望的默认钥匙串将可用;否则,尽管任务以您的用户身份运行,但您只能使用系统钥匙串。

    我发现这里的答案(尽管目前不是最佳答案)对解决这个问题很有用:Missing certificates and keys in the keychain while using Jenkins/Hudson as Continuous Integration for iOS and Mac development

    【讨论】:

      【解决方案2】:

      您使用哪个帐户执行您的 cron 作业?

      很可能是问题! 你可以添加

      echo `whoami`
      

      在脚本的开头查看脚本是由哪个用户启动的。

      此外,当从 cron 启动 Bash 脚本时,它不会使用与以用户身份启动它时相同的环境变量(非登录 shell)。

      【讨论】:

      • 用户和我从终端使用的一样
      • 所以如果是同一个用户,很有可能是环境的问题。
        启动bash shell时,有3种模式:登录交互Shell,当您从控制台登录时,Non-Login Interactive Shell,当您从终端启动时,以及 Non-Interactive Shell 当它从脚本启动时。
        在第三种情况下,它不读取~/.bash_profile文件。所以你可能对这个文件中定义的$PATH有问题。你可以添加“source ~/.bash_profile”您的脚本重新定义正确的变量或在脚本中重新定义正确的路径。
      【解决方案3】:

      当脚本从 cron 启动时,它不会加载您的 $HOME/.profile(或 .bash_profile)。就其环境而言,您从 cron 运行的任何东西都必须 100% 自给自足。我建议您自己创建一个名为“set_build_env.sh”之类的文件,它应该包含您需要构建的 .profile 中的所有内容,例如 $PATH、$HOME、$CLASSPATH 等。然后在您的构建脚本中,加载set_build_env.sh 使用点符号或源 cmd ,如 ericc 所说。您还应该从 your.profile 中删除特定于构建的行,然后也从那里获取 set_build_env ,这样只有一个地方需要维护。例子: source /home/dmitry/set_build_env.sh #绝对路径 . /home/dmitry/set_build_env.sh #dot-space notation 与 "source" 相同

      【讨论】:

        猜你喜欢
        • 2018-03-07
        • 1970-01-01
        • 1970-01-01
        • 2015-08-11
        • 2021-12-26
        • 1970-01-01
        • 2016-02-27
        • 2016-07-20
        相关资源
        最近更新 更多