簡體   English   中英

Crontab上的Python不執行bash腳本

[英]Python on Crontab does not execute bash script

import subprocess as sub
import re
import os
from datetime import datetime as influx_timestap
from influxdb import InfluxDBClient
from collections import OrderedDict

insert_json = []
hostname = str(sub.check_output('hostname')).strip()
location = str(sub.check_output(['ps -ef | grep mgr'], shell=True)).split()
current_dir = os.getcwd()
print("script executed")
gg_location_pattern = re.compile(r'mgr\.prm$')
gg_process_pattertn = re.compile(r'^REPLICAT|^EXTRACT')
for index in location:
    if gg_location_pattern.search(index) != None:
        gg_location = index[:-14]

os.chdir(gg_location)
print("checkpoint1")
get_lag = sub.check_output(str(current_dir) + '/ggsci_test.sh', shell=True)
print("checkpoint2")
processes = get_lag.split("\n")

for process in processes:
    if gg_process_pattertn.search(process) != None:
        lag_at_chkpnt = int((process.split()[3]).split(":")[0]) * 3600 + int((process.split()[3]).split(":")[1]) *60 + int((process.split()[3]).split(":")[2])
        time_since_chkpnt = int((process.split()[4]).split(":")[0]) * 3600 + int((process.split()[4]).split(":")[1]) *60 + int((process.split()[4]).split(":")[2]
)
        process_dict = OrderedDict({"measurement": "GoldenGate_Mon_" + str(hostname) +  "_Graph",
                        "tags": {"hostname": hostname, "process_name": process.split()[2]},
                        "time": influx_timestap.now().isoformat('T'),
                        "fields": {"process_type": process.split()[0], "process_status": process.split()[1],
                        "lag_at_chkpnt": lag_at_chkpnt, "time_since_chkpnt": time_since_chkpnt}})
        insert_json.append(process_dict)


host = 'xxxxxxxx'
port = 'x'
user = 'x'
password = 'x'
dbname = 'x'
print("before client")
client = InfluxDBClient(host, port, user, password, dbname)
client.write_points(insert_json)
print("after client")

這段代碼可以手動完美運行,但是在crontab上卻無法正常工作。 在互聯網上搜索后,我發現他們說在crontab上更改或設置了您的“ PATH”變量。 我更改了“ PATH”變量,但仍無法正常工作。

Crontab日志文件寫“ checkpoint1”之后,就什么也沒有了。 因此,行不起作用是"get_lag = sub.check_output(str(current_dir) + '/ggsci_test.sh', shell=True)"

之后我該怎么辦? 照顧自己,

看來您的外部腳本(ggsci_test.sh)的路徑/一般故障有問題。

從關於subprocess.check_outputPython子流程文檔中

如果返回碼非零,則引發CalledProcessError。 CalledProcessError對象將在returncode屬性中具有返回碼,在output屬性中具有任何輸出。

因此,這就是為什么您在捕獲錯誤時看到錯誤,但無法繼續的原因。

因此,您應該檢查您的Shell腳本是否有任何需要解決的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM