Plist会一直被加载,不会结束,并且在条件为m时不会退出

2024-09-25 16:33:14 发布

您现在位置:Python中文网/ 问答频道 /正文

在花了这么多时间试图解决这个问题之后,我请求帮助

我有一个使用Selenium的Python脚本,它必须每24小时在我的Mac上执行一次。这就是普利斯特

<?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>

正如您所看到的,我使用了keywork 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获取两个datetime.datetime.now()字符串,并对它们进行比较,查看相等性。由于此函数在大多数情况下返回false,所以如果条件使任务结束,则不会发生这种情况。这是否与不可能让任务以exit(0)结束有关

提前谢谢


Tags: key代码datestringreturnifbotusers
1条回答
网友
1楼 · 发布于 2024-09-25 16:33:14

感觉就像KeepAlive正在做你要求它做的事情,它让你的守护进程保持活力,忽略它成功退出的事实

尝试明确地告诉它,它应该让守护进程在成功退出时死亡

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

相关问题 更多 >