Python сценарий установлен для запуска при загрузке на Ма c не будет работать - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть сценарий Python, который я хочу запустить при запуске и продолжаю работать непрерывно на Ma c. Я полагаю, что скрипт выполняется, но он не продолжает работать.
Установка представляет собой plist-скрипт, загруженный с launchctl для запуска Python скрипта при загрузке, который должен всегда работать.
(всегда работает) * Сценарий 1025 * использует модуль «расписание», который должен выполнять функцию в определенное время c.
Как я могу запустить этот сценарий, пока компьютер включен? Могу ли я увидеть, что он где-то работает?

В частности: если я вручную запускаю только скрипт Python в терминале, он работает непрерывно и выполняет функцию в указанное время с модулем расписания.
Если у меня есть при загрузке сценария plist при запуске сценарий Python НЕ выполняет функцию в указанное время, хотя, если я изменю сценарий Python на выполнение функции ОДИН РАЗ, сценарий plist выполнит его при запуске.
[In весь приведенный ниже код заменит '/ path / на' на ваши пути и на ваше имя пользователя Ma c, et c. при репликации.]
Сценарий plist ...

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs$
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>Run.The.FB.photoblast</string>
    <key>ProgramArguments</key>
    <array>
        <string>/path/to/python</string>
        <string>/path/to/python/script.py</string>
    </array>
    <key>StandardErrorPath</key>
    <string>/var/log/python_script.error</string>
    <key>KeepAlive</key>
    <true/>
</dict>
</plist>  

Я сохраняю этот файл в

/Users/<user_name>/Library/LaunchAgents/FB_Photo_script_launcher.plist  

и запускаю ...

sudo launchctl load -w /Users/<user_name>/Library/LaunchAgents/FB_Photo_script_launcher.plist  

Сценарий Python, приведенный ниже, должен опубликовать фотографию на странице Facebook в 13:00. (На мой вопрос скрипт Python может сделать что-нибудь измеримое). Из-за 'while True' внизу, этот скрипт должен всегда запускаться и ожидать запуска schedule.run_pending ().

import os
import time
import glob
import random
import facebook
import schedule

#wait 13 seconds to give the computer time to wake up
time.sleep(13)

def job():
  allphotofiles = glob.glob('/users/<user_name>/documents/fbcal/photos/*.jpg')
  one_photo = allphotofiles[random.randint(0, len(allphotofiles)-1)]
  #one_photo = glob.glob(one_random + '/*.jpg')[0]

  d = {
      'Calg Big': 'FACEBOOK_PAGE_TOKEN'}
  for i in d:
      graph = facebook.GraphAPI(access_token=d[i], version='3.1')
      graph.put_photo(image=open(one_photo, "rb"))
      print(i)


  os.rename(one_photo, '/users/<user_name>/documents/fbcal/used/'+one_photo[43:])

# job()

schedule.every().day.at("13:00").do(job())

while True:
  schedule.run_pending()
  time.sleep(1)  

Спасибо, что прочитали этот вопрос. Моя ситуация очень запутанная. Может быть, мне нужен совершенно другой подход. Я пытался создать «приложение» с помощью Automator, но у него было несколько проблем. Версия Automator Python не могла импортировать Facebook SDK, вентиляторы моих компьютеров работали на полной скорости, когда я запускал приложение вручную или при запуске. Я не мог понять, как запланировать это, и у меня уже есть часть планирования, о которой позаботились в сценарии Python. Мне просто нужен скрипт Python для запуска при загрузке и никогда не прекращать работу. Есть ли другой таймер, который я могу использовать для запуска сценария в одно и то же время каждый день без использования Automator?

1 Ответ

0 голосов
/ 06 февраля 2020

Я только что удалил планирование внутри скрипта Python и настроил функцию на запуск при вызове скрипта. Затем создал задание cron для выполнения каждый день в 14:00.

EDITOR=/usr/bin/nano crontab -e

0 14 * * * - ежедневно в 14:00

0 14 * * * /anaconda3/bin/python /Users/mycomputername/Documents/FBcal/s2cheduler.py >> ~/cron.log 2>&1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...