2011-12-26 2 views
2

Когда я создаю проект из терминала с помощью команды «xcodebuild», мне удается, но когда я пытаюсь выполнить один и тот же сценарий из задачи cron, я получаю ошибку «Ошибка кодового знака: идентификатор» * ** * 'не соответствует любому действительному сертификату/закрытому ключ в связке ключей по умолчанию»Построение проекта из задачи cron

Я думаю, что проблема в настройках и разрешениях утилиты кронтаба, кажется кронтаб не видит мой брелка

Может ли кто-нибудь предоставить мне команду терминала, как сделать мой брелок, видимый для crontab

ответ

0

Вы выполняете свое задание cron с помощью учетной записи?

скорее всего проблема !! Вы можете добавить

echo `whoami` 

в начале вашего скрипта, чтобы увидеть, с которым пользователь скрипт запускается.

Также при запуске сценария Bash из cron он не использует ту же переменную среды (не входящую в систему), как при ее запуске в качестве пользователя.

+0

пользователь такой же, как я использую от терминала –

+0

Есть ли у вас какие-либо другие идеи, как решить эту проблему? –

+0

Итак, если это тот же пользователь, это, вероятно, проблема с окружающей средой.
Когда вы запускаете оболочку bash, у вас есть 3 режима: ** Вход в интерактивную оболочку **, когда вы входите в систему с консоли, ** Не вступительная интерактивная оболочка **, когда вы начинаете с терминала, и ** Non- Interactive Shell **, когда он запускается из сценария.
В третьем случае он не читает файл ~/.bash_profile. Вероятно, у вас есть проблема с $ PATH, который определен в этом файле. Вы можете добавить «source ~/.bash_profile» в свой скрипт, чтобы переопределить правильные переменные или переопределить правильный путь в скрипте. – ericc

0

Когда скрипт запускается из cron, он не загружает ваш файл $ HOME/.profile (или .bash_profile). Все, что вы запускаете из cron, должно быть 100% самодостаточным с точки зрения его среды. Я бы предложил вам создать файл под названием «set_build_env.sh». Он должен содержать все, что требуется от вашего .profile, который вам нужно собрать, например $ PATH, $ HOME, $ CLASSPATH и т. Д. Затем в скрипте сборки загрузите set_build_env.sh с использованием точечной нотации или исходного cmd как указано ericc. Вы также должны удалить строковые строки из файла your.profile, а затем source set_build_env оттуда, чтобы сохранить только одно место. Пример: источник /home/dmitry/set_build_env.sh #absolute path . /home/dmitry/set_build_env.sh # точечный пробел, такой же как «источник»

1

Я столкнулся с аналогичной проблемой, пытаясь построить каждую ночь через cron. Единственное разрешение, которое я нашел, это создать plist в/Library/LaunchDaemons/и загрузить его через launchctl. Необходимым является «SessionCreate», иначе вы быстро столкнетесь с проблемами, сходными с тем, что было с попыткой использовать cron, а именно, что ваш пользователь login.keychain не доступен для процесса. «SessionCreate» похож на «su -l» в том, что (насколько я понимаю) он имитирует логин и, таким образом, будут использоваться цепочки ключей по умолчанию, которые вы ожидаете; в противном случае вы застряли только в системной цепочке ключей, несмотря на задачу, выполняемую как ваш пользователь.

Я нашел ответы (хотя и не топ ответ в настоящее время) здесь полезно в troublw съемки этот вопрос: Missing certificates and keys in the keychain while using Jenkins/Hudson as Continuous Integration for iOS and Mac development