Saya mencoba menjalankan skrip python menggunakan crontab Linux. Saya ingin menjalankan skrip ini setiap 10 menit.
Saya menemukan banyak solusi dan tidak ada yang berhasil. Misalnya: edit anacron di /etc/cron.d atau gunakan crontab -e
. Saya meletakkan baris ini di akhir file, tetapi tidak mengubah apa pun. Apakah saya harus memulai ulang layanan apa pun?
*/2 * * * * /usr/bin/python /home/souza/Documets/Listener/listener.py
File apa yang harus saya edit untuk mengkonfigurasi ini?
Terima kasih sebelumnya
Ini skripnya.
#!/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()
Jawaban:
Cukup gunakan
crontab -e
dan ikuti tutorialnya di sini.Lihat poin 3 untuk panduan tentang cara menentukan frekuensi.
Berdasarkan kebutuhan Anda, secara efektif harus:
*/10 * * * * /usr/bin/python script.py
sumber
script.py
satu - satunya di direktori yang diberikan?Letakkan skrip Anda dalam file yang
foo.py
dimulai dengan#!/usr/bin/python
kemudian berikan izin eksekusi ke skrip itu menggunakan
dan gunakan jalur lengkap
foo.py
file Anda dicrontab
.Lihat dokumentasi dari execve (2) yang menangani shebang tersebut
sumber
sh
skrip shell POSIX maka ya. Jika mereka menggunakan fitur tidak standar khusus untukksh
,zsh
, ataubash
maka mereka perlu dijalankan menggunakan yang shell tertentu.Seperti yang Anda sebutkan tidak mengubah apa pun ,
Pertama, Anda harus mengalihkan stdin dan stderr dari eksekusi crontab seperti di bawah ini:
*/2 * * * * /usr/bin/python /home/souza/Documets/Listener/listener.py > /tmp/listener.log 2>&1
kemudian Anda dapat melihat file tersebut
/tmp/listener.log
untuk melihat apakah skrip dijalankan seperti yang Anda harapkan.Kedua, tebak maksud Anda mengubah apa pun adalah dengan melihat file yang dibuat oleh program Anda:
f = file('counter', 'r+w') json_file = file('json_file_create_server.json','r+w')
tugas crontab di atas tidak akan membuat file ini di direktori
/home/souza/Documets/Listener
, karena tugas cron tidak dijalankan di direktori ini, dan Anda menggunakan jalur relatif dalam program. Jadi untuk membuat file ini di direktori/home/souza/Documets/Listener
, pekerjaan cron berikut akan melakukan triknya:*/2 * * * * cd /home/souza/Documets/Listener && /usr/bin/python listener.py > /tmp/listener.log 2>&1
Ubah ke direktori kerja dan jalankan skrip dari sana, lalu Anda dapat melihat file yang dibuat di tempatnya.
sumber
stderr
) ke baris perintah yang terlihat (stdout
)