Ich versuche, ein Python-Skript mit der Linux-Crontab auszuführen. Ich möchte dieses Skript alle 10 Minuten ausführen.
Ich habe viele Lösungen gefunden und keine davon funktioniert. Beispiel: Bearbeiten Sie das Anakron unter /etc/cron.d oder verwenden Sie crontab -e
. Ich habe diese Zeile am Ende der Datei eingefügt, aber sie ändert nichts. Muss ich einen Dienst neu starten?
*/2 * * * * /usr/bin/python /home/souza/Documets/Listener/listener.py
Welche Datei muss ich bearbeiten, um dies zu konfigurieren?
Danke im Voraus
Hier ist das Skript.
#!/usr/bin/python
# -*- coding: iso-8859-15 -*-
import json
import os
import pycurl
import sys
import cStringIO
if __name__ == "__main__":
name_server_standart = "Server created by script %d"
json_file_standart = "{ \"server\" : { \"name\" : \"%s\", \"imageRef\" : \"%s\", \"flavorRef\" : \"%s\" } }"
curl_auth_token = pycurl.Curl()
gettoken = cStringIO.StringIO()
curl_auth_token.setopt(pycurl.URL, "http://192.168.100.241:8774/v1.1")
curl_auth_token.setopt(pycurl.POST, 1)
curl_auth_token.setopt(pycurl.HTTPHEADER, ["X-Auth-User: cpca",
"X-Auth-Key: 438ac2d9-689f-4c50-9d00-c2883cfd38d0"])
curl_auth_token.setopt(pycurl.HEADERFUNCTION, gettoken.write)
curl_auth_token.perform()
chg = gettoken.getvalue()
auth_token = chg[chg.find("X-Auth-Token: ")+len("X-Auth-Token: ") : chg.find("X-Server-Management-Url:")-1]
token = "X-Auth-Token: {0}".format(auth_token)
curl_auth_token.close()
#----------------------------
getter = cStringIO.StringIO()
curl_hab_image = pycurl.Curl()
curl_hab_image.setopt(pycurl.URL, "http://192.168.100.241:8774/v1.1/nuvemcpca/images/7")
curl_hab_image.setopt(pycurl.HTTPGET, 1) #tirei essa linha e funcionou, nao sei porque
curl_hab_image.setopt(pycurl.HTTPHEADER, [token])
curl_hab_image.setopt(pycurl.WRITEFUNCTION, getter.write)
#curl_list.setopt(pycurl.VERBOSE, 1)
curl_hab_image.perform()
curl_hab_image.close()
getter = cStringIO.StringIO()
curl_list = pycurl.Curl()
curl_list.setopt(pycurl.URL, "http://192.168.100.241:8774/v1.1/nuvemcpca/servers/detail")
curl_list.setopt(pycurl.HTTPGET, 1) #tirei essa linha e funcionou, nao sei porque
curl_list.setopt(pycurl.HTTPHEADER, [token])
curl_list.setopt(pycurl.WRITEFUNCTION, getter.write)
#curl_list.setopt(pycurl.VERBOSE, 1)
curl_list.perform()
curl_list.close()
#----------------------------
resp = getter.getvalue()
con = int(resp.count("status"))
s = json.loads(resp)
lst = []
for i in range(con):
lst.append(s['servers'][i]['status'])
for j in range(len(lst)):
actual = lst.pop()
print actual
if actual != "ACTIVE" and actual != "BUILD" and actual != "REBOOT" and actual != "RESIZE":
print "Entra no If"
f = file('counter', 'r+w')
num = 0
for line in f:
num = line
content = int(num)+1
ins = str(content)
f.seek(0)
f.write(ins)
f.truncate()
f.close()
print "Contador"
json_file = file('json_file_create_server.json','r+w')
name_server_final = name_server_standart % content
path_to_image = "http://192.168.100.241:8774/v1.1/nuvemcpca/images/7"
path_to_flavor = "http://192.168.100.241:8774/v1.1/nuvemcpca/flavors/1"
new_json_file_content = json_file_standart % (name_server_final, path_to_image, path_to_flavor)
json_file.seek(0)
json_file.write(new_json_file_content)
json_file.truncate()
json_file.close()
print "Json File"
fil = file("json_file_create_server.json")
siz = os.path.getsize("json_file_create_server.json")
cont_size = "Content-Length: %d" % siz
cont_type = "Content-Type: application/json"
accept = "Accept: application/json"
c_create_servers = pycurl.Curl()
logger = cStringIO.StringIO()
c_create_servers.setopt(pycurl.URL, "http://192.168.100.241:8774/v1.1/nuvemcpca/servers")
c_create_servers.setopt(pycurl.HTTPHEADER, [token, cont_type, accept, cont_size])
c_create_servers.setopt(pycurl.POST, 1)
c_create_servers.setopt(pycurl.INFILE, fil)
c_create_servers.setopt(pycurl.INFILESIZE, siz)
c_create_servers.setopt(pycurl.WRITEFUNCTION, logger.write)
print "Teste perform"
c_create_servers.perform()
print logger.getvalue()
c_create_servers.close()
Antworten:
Verwenden Sie einfach
crontab -e
das Tutorial hier und folgen Sie ihm .In Punkt 3 finden Sie eine Anleitung zum Festlegen der Frequenz.
Basierend auf Ihrer Anforderung sollte es effektiv sein:
quelle
script.py
einzige im angegebenen Verzeichnis ausführen möchten ?Fügen Sie Ihr Skript in eine Datei ein,
foo.py
die mit beginntGeben Sie dann diesem Skript die Ausführungsberechtigung mit
und verwenden Sie den vollständigen Pfad Ihrer
foo.py
Datei in Ihremcrontab
.Siehe Dokumentation von execve (2), das den Shebang behandelt
quelle
sh
Shell-Skripte handelt, dann ja. Wenn sie nicht standardmäßige Funktionen verwenden , die für oder spezifischksh
sindzsh
, oderbash
dann müssen sie mit dieser spezifischen Shell ausgeführt werden.Wie Sie erwähnt haben, ändert sich nichts ,
Zunächst sollten Sie sowohl stdin als auch stderr von der Crontab-Ausführung wie folgt umleiten:
Anschließend können Sie die Datei anzeigen, um festzustellen
/tmp/listener.log
, ob das Skript wie erwartet ausgeführt wurde.Zweitens, raten Sie mal, was Sie damit meinen , etwas zu ändern, indem Sie sich die von Ihrem Programm erstellten Dateien ansehen:
Der obige crontab-Job erstellt diese Datei nicht im Verzeichnis
/home/souza/Documets/Listener
, da der cron-Job in diesem Verzeichnis nicht ausgeführt wird und Sie den relativen Pfad im Programm verwenden. Um diese Datei im Verzeichnis zu erstellen/home/souza/Documets/Listener
, reicht der folgende Cron-Job aus:Wechseln Sie in das Arbeitsverzeichnis und führen Sie das Skript von dort aus aus. Anschließend können Sie die an Ort und Stelle erstellten Dateien anzeigen.
quelle
stderr
) zur sichtbaren Befehlszeile (stdout
) um