Plist продолжает загружаться и не заканчивается, и он не выходит при выполнении условий - PullRequest
1 голос
/ 11 ноября 2019

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

У меня есть Python Script, работающий с Selenium, который должен запускаться на моем Mac каждые 24 часа. Это список

<?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>bot.subito</string>

    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/bin/python3.8</string>
        <string>/Users/someuser/somedir/bot.py</string>
    </array>

    <key>StandardErrorPath</key>
    <string>/Users/someuser/somedir/errors/bot_subito.err</string>

    <key>StandardOutPath</key>
    <string>/Users/someuser/somedir/errors/bot_subito.out</string>

    <key>StartInterval</key>
    <integer>86400</integer>

    <key>RunAtLoad</key>
    <true/>

    <key>KeepAlive</key>
    <true/>

</dict>
</plist>

Как вы можете видеть, я использовал клавиатуру RunAtLoad для запуска кода при запуске и KeepAlive, чтобы не дать процессу прекратиться. Хотя я могу ошибаться в том, как эта штука работает. Проблема в том, что с этой настройкой мой код выполняется, но как только он заканчивается, он запускается снова! Вместо этого я хочу, чтобы он снова запускался через 24 часа или при запуске. Как я могу решить эту проблему?

Кроме того, предположим, что в этом скрипте присутствует фрагмент кода, такой как:

def compare_24h_date(date1, date2):
  def compare_24h_date(date1, date2):
    # Suppose date2 > date1
    if date1[:4] == date2[:4]:
        if date1[5:7] == date2[5:7]:
            if date1[8:10] != date2[8:10]:
                return True
            else:
                return False
    return True

if not compare_24h_date(timeOfPublishing, currTime):
    print("24 hours has not passed since last publish.\n")
    exit(0)

compare_24hrs_date занимает 2 строки datetime.datetime.now()и сравни их тоже видишь равенство. Поскольку эта функция в большинстве случаев возвращает false, если условие должно завершить мою задачу, тогда этого не происходит. Связано ли это с невозможностью завершить задачу exit(0)?

Заранее спасибо.

1 Ответ

1 голос
/ 11 ноября 2019

Такое чувство, что KeepAlive делает именно то, о чем вы его просили, он поддерживает ваш демон живым, игнорируя тот факт, что он успешно завершился.

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

<key>KeepAlive</key>
<dict>
    <key>SuccessfulExit</key>
    <false/>
</dict> 
...