Я хочу запланировать запуск кода на 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 для запуска этой программы, потому что я не хочу устанавливать все пакеты глобально.