Как я могу запускать свой applescript с интервалами

Я сделал скрипт, который каждый день получает местное время, а затем делает псевдоним папки, указанной мной через код на рабочем столе. В начале спрашивает, какой сегодня день (через список). Это не работает, потому что даже если я использую launchd для запуска каждые 5 минут, он будет запрашивать у меня список. Есть ли способ сохранять переменную каждый день, а затем просто заставить ее выполнять остальную часть работы в течение дня?

На самом деле я объединил AppleScript и Automator, чтобы заставить его работать, поэтому мне нужно запустить Automator, а не AppleScript.

Мой 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>RunAtLoad</key>  
        <true/>
        <key>KeepAlive</key>
        <true/>
        <key>Label</key>
        <string>wallpaper.restart</string>
        <key>ProgramArguments</key>
        <array>
                <string>PATH:TO:FILE</string> 
        </array>
        <key>StartCalendarInterval</key>
        <dict>
            <key>Hour</key>
            <integer>1</integer>

       </dict>
</dict>
</plist>

Я был бы признателен за любые указатели для меня, чтобы начать работу, или что-нибудь, что могло бы помочь.

Спасибо


person Dev    schedule 01.06.2016    source источник
comment
Как уже упоминалось в вашем связанном вопросе, этот код запускает скрипт в 13:00 каждый день (и всегда, когда компьютер запускается из-за ключа RunAtLoad), но не на основе интервала. Чтобы сохранить состояния, сделайте это на стороне AppleScript/Automator либо в свойстве, используя пользовательские значения по умолчанию, либо шаблон load/store script. А для чего keepAlive?   -  person vadian    schedule 01.06.2016
comment
@vadian Извините за поздний ответ - и спасибо за быстрый ответ;) Да, вы правы, и я по ошибке скопировал неправильный код. В моем новом коде у меня есть новое обновление.   -  person Dev    schedule 02.06.2016
comment
Еще раз: вы знаете, что на самом деле делает keepAlive?   -  person vadian    schedule 02.06.2016
comment
@vadian - это означает, что скрипт остается активным / работающим, пока пользователь использует компьютер / вошел в систему. Верно?   -  person Dev    schedule 03.06.2016
comment
keepAlive влияет только на процессы UNIX с циклом выполнения. Сценарий не является процессом, поэтому keepAlive не имеет никакого эффекта.   -  person vadian    schedule 03.06.2016
comment
@vadian Извините .. тогда я не знал.   -  person Dev    schedule 06.06.2016


Ответы (1)


Чтобы запускать скрипт с некоторым интервалом, вы должны использовать .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.mycompany.myScript</string>
    <key>Program</key>
    <string>/Applications/myScript/myScript.app/Contents/MacOS/applet</string>
    <key>LowPriorityIO</key>
    <true/>
    <key>Nice</key>
    <integer>1</integer>
  <key>StartInterval</key>
  <integer>600</integer>
</dict>
</plist>

Измените 600 на любое количество секунд, которое вы хотите, чтобы оно работало, например, 300 за каждые 5 минут.

Чтобы записать данные в файл .plist, чтобы вы могли получить к нему доступ в любое время, вы должны использовать что-то вроде этого...

do shell script "defaults write com.mycompany.myApp MyInfo '" & theInfo & "'"

Чтобы затем прочитать информацию, вы должны использовать такой код...

set myPref to do shell script "defaults read com.mycompany.myApp MyInfo"

Наконец, я не уверен, что вам нужен «список», вы можете получить дату, используя скрипт, подобный этому...

do shell script "date \"+%Y-%m-%d\""

В этом примере я выбрал формат 2016-06-01, но вы можете изменить информацию о формате на любой другой, изменив строку после команды даты. Дополнительную информацию см. на странице руководства для даты или посмотрите здесь.

person ThrowBackDewd    schedule 01.06.2016
comment
Спасибо за ваш ответ, моя спецификация - День 1, День 2 и т. Д. До Дня 6. Кроме того, я не уверен, но предоставленный вами сценарий будет хранить переменную не более одного дня? Можем ли мы попробовать запустить его как сервер (или это ничего не даст?) - person Dev; 02.06.2016
comment
@Dev Строка set myPref to do shell script "defaults read com.mycompany.myApp MyInfo" запишет данные в файл .plist, который будет жить, пока существует файл (файл записывается в вашу предпочтительную папку). Я не уверен, к чему относятся ваши День 1 и День 2, но вы можете использовать дату команды, как я предложил, чтобы получить день недели, неделю года или многие другие параметры. В зависимости от вашего варианта использования, возможно, стоит изучить его. - person ThrowBackDewd; 02.06.2016
comment
В очередной раз благодарим за помощь. Просто чтобы еще раз уточнить, День 1, День 2, День 3 — это в основном имена, которые я установил. Он продолжается до 6-го дня. Причина, по которой я не могу использовать «дату», заключается в том, что это не то, что система распознает, это что-то, созданное мной. Пожалуйста, не путайте День 1, День 2 и понедельник, вторник, потому что это совершенно разные вещи. Это почти как имена из дикой природы — «бананы, яблоки, апельсины». Это упорядоченные слова, но не то, что AppleScript знает по сравнению с «2 июня 2016 г. или 12:33:04 и т. д.». - person Dev; 03.06.2016
comment
@Dev Имеет смысл. Мне просто интересно, сможете ли вы использовать дату и ваши случайные слова, чтобы знать, когда переходить с Дня 1 на День 2 и тому подобное. - person ThrowBackDewd; 03.06.2016
comment
Как это работает: если завтра (6 июня) будет день 1, то пятница станет днем ​​5, а следующий понедельник станет днем ​​6. Таким образом, это повторяющийся цикл с понедельника по пятницу. Я думаю, что будет сложно интегрироваться с датой, но, возможно, мы могли бы попробовать. @ThrowBackDewd - person Dev; 06.06.2016