Невозможно запустить задание cron для файла python с помощью crontab - PullRequest
0 голосов
/ 21 октября 2019

Я хочу запланировать запуск кода на Python каждую минуту. Я обнаружил, что crontab - хороший вариант. Я изначально пробовал с example1.py. Содержимое example1.py:

from datetime import datetime
myFile = open('append.txt', 'a') 
myFile.write('\nAccessed on ' + str(datetime.now()))

Содержимое файла задания cron: * * * * * python example1.py. Это сработало.

Затем я продолжил использовать свой код Python для того же. Я изменил содержимое, используя crontab -e как * * * * * python mycode.py. Теперь нет ошибки, но нет ожидаемого результата. Однако файл хорошо работает в терминале: python mycode.py.

import requests
from onesignal import OneSignal, SegmentNotification,DeviceNotification
import json
import pyodbc
import cx_Oracle
from datetime import datetime

Onesignal_REST_API_KEY="***************"
Onesignal_APP_ID="***********"

MSSQL_DB_CREDENTIALS="DRIVER={SQL Server};SERVER=**********;DATABASE=**;UID=***;PWD=***"
username='***/'
password='***'
hostname='@***:'
port='***'
servicename='/***'

def func1():
    cnxn = pyodbc.connect(MSSQL_DB_CREDENTIALS)
    select_query="SELECT count(*) FROM mytable"
    try:
       with cnxn.cursor() as cur:
            cur.execute(select_query)
            data=cur.fetchall()
       cnxn.close()
       return data
    except pyodbc.Error as e:
    print(e)

def func2():
    con = cx_Oracle.connect(username+password+hostname+port+servicename)
    print("connected")
    select_query='''select count(*) from table2'''
    try:
       with con.cursor() as cur:
            print("executing")
            cur.execute(select_query)
            data=cur.fetchall()
       con.close()
       return data
    except cx_Oracle.Error as e:
         print(e)

def os_push_notifs():
    try:
       data1=func1()
       data2=func2()
       data = {"app_id": Onesignal_APP_ID, "included_segments": ["All"], "contents": {"en": "Hello."+ str(data1[0][5]) +str(data2[0][0])+" - "+(datetime.now()).strftime("%m/%d/%Y, %H:%M:%S")}}
       res=requests.post("https://onesignal.com/api/v1/notifications",    headers={"Authorization": "Basic "+Onesignal_REST_API_KEY},json=data)
       return res.content
    except Exception as e:
    return str(e)


def os_notif():
    try:
        response = os_push_notifs()
        print(response)
    except Exception as e:
        print(str(e))

os_notif()

Я также пытался использовать сценарии оболочки. Я создал trigger.sh и его содержимое python mycode.py. ./trigger.sh работает хорошо, как и ожидалось. Но то же самое, что указано в файле задания cron, не выдает ошибку и не работает как ожидалось.

Я использую среду conda для запуска этой программы, потому что я не хочу устанавливать все пакеты глобально.

...