在MacOS上每小时执行一次Python脚本

时间:2016-03-27 16:11:29

标签: python macos cron cron-task

目标

我有一个用python编写的脚本。

  1. 连接数据库
  2. 插入一些虚假数据
  3. 我的目标是每小时执行一次该脚本。

    database.py

    #!/usr/bin/python
    
    
    import MySQLdb
    import random
    import requests
    import time
    
    
    db = MySQLdb.connect(host="localhost",    # your host, usually localhost
                         user="root",         # your username
                         passwd="*********",  # your password
                         db="db-local")       # name of the data base
    
    # you must create a Cursor object. It will let
    #  you execute all the queries you need
    cur = db.cursor()
    
    # The first line is defined for specified vendor
    mac = [ 0x00, 0x24, 0x81,
        random.randint(0x00, 0x7f),
        random.randint(0x00, 0xff),
        random.randint(0x00, 0xff) ]
    
    device_mac =  ':'.join(map(lambda x: "%02x" % x, mac))
    cpe_mac = '000D6766F2F6'
    
    url = "https://randomuser.me/api/"
    data = requests.get(url).json()
    firstname = data['results'][0]['user']['name']['first']
    lastname = data['results'][0]['user']['name']['last']
    email = data['results'][0]['user']['email']
    gender = data['results'][0]['user']['gender']
    
    age_range_options = [">15", "15-25", "25-40","40+"]
    age_range = random.choice(age_range_options)
    
    ip = '10.10.10.10'
    host_name = 'cron.job'
    visit_count = 1
    created_at = time.strftime('%Y-%m-%d %H:%M:%S')
    updated_at = time.strftime('%Y-%m-%d %H:%M:%S')
    
    sql = ('''INSERT INTO visitors (device_mac,cpe_mac,firstname, lastname, email, gender, age_range,ip,host_name,visit_count,created_at, updated_at) VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)''')
    
    args = (device_mac,cpe_mac, firstname, lastname, email, gender, age_range,ip, host_name,visit_count, created_at, updated_at)
    cur.execute(sql,args)
    db.commit()
    
    
    # for record in records:
    # print records
    
    db.close()
    

    CronniX

    我做了一些研究,人们提出了一堆应用来做这件事。

    所以我尝试下载/安装 CronniX

    创建任务>设置计划>并运行它。

    enter image description here

    它一直挂在executing ...

    任务直到黎明

    除此之外,我还尝试了任务Till Dawn ,并再次

    创建任务>设置计划>并运行它。

    结果

    enter image description here

    似乎没有任何内容插入我的数据库,即使它说35次成功执行。它所做的就是在database.py窗口内弹出Xcode

    终端

    我运行python database.py,它工作正常,数据插入。

    我在想,这是许可问题,但我已经做了

    sudo chmod a+x database.py

    我错过了什么?实现这一目标的更好方法是什么?

    任何建议/提示将不胜感激!

4 个答案:

答案 0 :(得分:5)

您也可以使用crontab:

每小时:

crontab 0 * * * * /path/to/script

每分钟:

crontab * * * * * /path/to/script

要查看您的crontabs:

crontab -l

要查看更多选项:

man crontab

答案 1 :(得分:1)

您可以使用crontab,我认为它已经安装在OSX上了吗?

打开终端并运行crontab -e。这应该打开一个编辑器。在那里你可以输入

@hourly /usr/bin/python database.py

答案 2 :(得分:1)

根据Rafael Santos的建议,你可以像这样使用一个cron:

您输入:crontab -e 并添加以下行:

0 * * * * /path/to/your/script

它会在一小时内运行你的脚本。或者,如果您使用Django,您可以使用Celery执行相同的操作。 (它有一个crontab类型)

答案 3 :(得分:1)

花时间运行,总和+ 1h,然后每5s验证电流,旧时间+ 1h

@classmethod
def rightFileType(cls, fileName):
    """Check if the filetype (extension) is correct for subclass.
    :type fileName: str | unicode
    :rtype: _sre.SRE_Match | None # here ?
    """
    return cls.file_extension.search(fileName)

你应该把它添加为函数,因为我的代码是丑陋的xDD