Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Execute Python script via crontab

Tags:

python

linux

cron

I'm trying to execute a Python script using the Linux crontab. I want to run this script every 10 minutes.

I found a lot of solutions and none of them worked. For example: edit the anacron at /etc/cron.d or use crontab -e. I put this line at the end of the file, but it doesn't change anything. Do I have to restart any service(s)?

*/2 * * * * /usr/bin/python /home/souza/Documets/Listener/listener.py 

What file must I edit to configure this?


Here is the script.

#!/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() 
like image 416
guisantogui Avatar asked Jan 04 '12 13:01

guisantogui


People also ask

Can crontab run Python script?

You should use Cron any time you want to automate something, like an OS job or a Python script. Needless to say, but an automated Python script can do basically anything. On Linux and macOS, the Crontab consists of six fields.

How do I schedule a Python script to run automatically?

Step 1: Open Task Scheduler Application on your Windows Machine. Step 2: Click on 'Create Basic Task…. ' in the Actions Tab. And give a suitable Name and Description of your task that you want to Automate and click on Next.


1 Answers

Just use crontab -e and follow the tutorial here.

Look at point 3 for a guide on how to specify the frequency.

Based on your requirement, it should effectively be:

*/10 * * * * /usr/bin/python script.py 
like image 59
Raul Marengo Avatar answered Oct 05 '22 05:10

Raul Marengo