Я пытаюсь запустить задание с помощью launchd которое запускает сценарий оболочки, который создает zip-файл, который я затем копирую.

Я получаю сообщение об ошибке: 6/26/13 5:04:37.992 PM com.apple.launchd.peruser.501[162]: (com.ian.evernote[18163]) Exited with code: 1

Вот мой launchd 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.ian.evernote</string>
    <key>KeepAlive</key>
    <dict>
        <key>SuccessfulExit</key>
        <false/>
    </dict>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/user/Dropbox/evernote.sh</string>
    </array>
    <key>StartInterval</key>
    <integer>3600</integer>

    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Вот мой сценарий оболочки:

#!/bin/bash

sudo zip -r ~/Documents/evernote_backup /Users/user/Library/Containers/com.evernote.Evernote/Data/Library

Сценарий оболочки прекрасно работает с терминала. Что я делаю неправильно?

1 ответ1

0

Вы не можете выполнить sudo внутри скрипта. Кто собирается ввести пароль? Зачем вам это нужно в первую очередь? Похоже, вы работаете в своей домашней папке, где вы должны иметь все необходимые разрешения.

Есть два решения.

  • Вам нужны повышенные привилегии

Сделайте эту работу демоном запуска вместо агента. Убедитесь, что вы изменили пути на абсолютные (~ развернется к домашнему каталогу исполняющих пользователей, который является / для запускаемых демонов).

  • Вы в порядке со стандартными привилегиями

Не используйте sudo .

Также: так как скрипт состоит из одной строки, я бы предложил удалить скрипт и напрямую вызвать zip :

<key>ProgramArguments</key>
<array>
    <string>/usr/bin/zip</string>
    <string>-r</string>
    <string>/Users/user/Documents/evernote_backup</string>
    <string>/Users/user/Library/Containers/com.evernote.Evernote/Data/Library</string>
</array>

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .