python crontab备选方案-APScheduler&;python守护进程

python crontab备选方案-APScheduler&;python守护进程,python,scheduler,python-daemon,Python,Scheduler,Python Daemon,我使用电脑有困难 与APScheduler一起管理任务列表 (计划程序需要在特定的选定时间(秒分辨率)定期运行它们) 工作(直到按下Ctrl+C), from apscheduler.scheduler import Scheduler import logging import signal def job_function(): print "Hello World" def init_schedule(): logging.basicConfig(level=l

我使用电脑有困难 与APScheduler一起管理任务列表

(计划程序需要在特定的选定时间(秒分辨率)定期运行它们)

工作(直到按下Ctrl+C),

from apscheduler.scheduler import Scheduler
import logging
import signal

def job_function():
    print "Hello World"

def init_schedule():
        logging.basicConfig(level=logging.DEBUG)
        sched = Scheduler()
        # Start the scheduler
        sched.start()

        return sched

def schedule_job(sched, function, periodicity, start_time):
        sched.add_interval_job(job_function, seconds=periodicity, start_date=start_time)

if __name__ == "__main__":

    sched = init_schedule()
    schedule_job(sched, job_function, 120, '2011-10-06 12:30:09')
    schedule_job(sched, job_function, 120, '2011-10-06 12:31:03')

    # APSScheduler.Scheduler only works until the main thread exits
    signal.pause()
    # Or
    #time.sleep(300)
样本输出:

信息:apscheduler.threadpool:已启动线程池,其中包含0个核心线程和最多20个线程 信息:apscheduler。计划程序:计划程序已启动 调试:apscheduler。计划程序:正在查找要运行的作业 调试:apscheduler。计划程序:无作业;等待添加作业 信息:apscheduler.scheduler:将作业“作业”功能(触发器:间隔[0:00:30],下次运行时间:2011-10-06 18:30:39)”添加到作业存储“默认” 信息:apscheduler.scheduler:将作业“作业”功能(触发器:间隔[0:00:30],下次运行时间:2011-10-06 18:30:33)”添加到作业存储“默认” 调试:apscheduler。计划程序:正在查找要运行的作业 调试:apscheduler.scheduler:下一次唤醒时间为2011-10-06 18:30:33(10.441128秒)

使用python守护进程, 输出为空。为什么DaemonContext不能正确生成进程

编辑-工作

在阅读了python守护程序源代码之后,我将stdout和stderr添加到DaemonContext中,并最终能够知道发生了什么

def job_function():
    print "Hello World"
    print >> test_log, "Hello World"

def init_schedule():
    logging.basicConfig(level=logging.DEBUG)
    sched = Scheduler()
    sched.start()

    return sched

def schedule_job(sched, function, periodicity, start_time):
    sched.add_interval_job(job_function, seconds=periodicity, start_date=start_time)

if __name__ == "__main__":

    test_log = open('daemon.log', 'w')
    daemon.DaemonContext.files_preserve = [test_log]

    try:
           with daemon.DaemonContext():
                   from datetime import datetime
                   from apscheduler.scheduler import Scheduler
                   import signal

                   logging.basicConfig(level=logging.DEBUG)
                   sched = init_schedule()

                   schedule_job(sched, job_function, 120, '2011-10-06 12:30:09')
                   schedule_job(sched, job_function, 120, '2011-10-06 12:31:03')

                   signal.pause()

    except Exception, e:
           print e


我对python守护进程了解不多,但是
job\u function()
中的
test\u log
没有定义。同样的问题也发生在
init_schedule()
中,您在这里引用了
schedule
我对python守护进程了解不多,但是
job_function()
中没有定义
测试日志。同样的问题也出现在
init_schedule()
中,您在这里引用
schedule

RockSportsRock,测试日志在main中定义,我以前尝试过运行它,Python解释器没有抱怨。我正在daemon.DaemonContext中导入调度程序,在我看来这是正确的做法,因为当守护程序分叉时,任何打开的套接字或文件都将被迫关闭。不幸的是,没有。我添加了一个示例输出。在第二种情况下,输出为空,并且没有写入test.log。目标是生成一个守护进程pid,任务无限期地运行。能否在with上下文中引入调试日志记录?只是为了看看执行了什么和没有执行什么…我在DaemonContext中添加了调试日志和stdout、stderr,并最终使其正常工作。谢谢你的耐心!忘记将'sched'对象传递给schedule_job调用,在编辑之前,我有:schedule_job(job_函数,120,'2011-10-06 12:30:09')这通常会被try/except构造捕获,但DaemonContext屏蔽了它,隐藏了所有输出。rocksportsrocker,test_log是在main中定义的,我以前试过运行它,Python解释器没有抱怨。我正在daemon.DaemonContext中导入调度程序,在我看来这是正确的做法,因为当守护程序分叉时,任何打开的套接字或文件都将被迫关闭。不幸的是,没有。我添加了一个示例输出。在第二种情况下,输出为空,并且没有写入test.log。目标是生成一个守护进程pid,任务无限期地运行。能否在with上下文中引入调试日志记录?只是为了看看执行了什么和没有执行什么…我在DaemonContext中添加了调试日志和stdout、stderr,并最终使其正常工作。谢谢你的耐心!忘记将'sched'对象传递给schedule_job调用,在编辑之前我有:schedule_job(job_函数,120,'2011-10-06 12:30:09')这通常会被try/except构造捕获,但DaemonContext屏蔽了它,隐藏了所有输出。我在Python中有一个简单的cron替换。它是可用的,入口点脚本是,如果你想给它一个镜头。我还没来得及把它重构成一个单独的应用程序。谢谢Noufal。我试试看。我欢迎你的反馈。我真的应该把它作为一个单独的包发布。我在Python中有一个简单的cron替换。它是可用的,入口点脚本是,如果你想给它一个镜头。我还没来得及把它重构成一个单独的应用程序。谢谢Noufal。我试试看。我欢迎你的反馈。我真的应该把它作为一个单独的包。