How to run a python script twice randomly in a day?

Avnesh Shakya avnesh.nitk at gmail.com
Tue May 21 00:36:00 EDT 2013


Thanks a lot. I got it.


On Tue, May 21, 2013 at 6:42 AM, Cameron Simpson <cs at zip.com.au> wrote:

> On 20May2013 15:05, Avnesh Shakya <avnesh.nitk at gmail.com> wrote:
> |     Thanks a lot.
>
> No worries, but ...
>
> AGAIN:
> - please DO NOT top post. Post below, trimming the quoted material.
> - please POST TO THE LIST, not just to me. This is a public discussion.
>
> Now...
>
> | I did something.
> | I have created test.sh file in which i put-
> |
> | #!/bin/bash
> | cd /home/avin/cronJob
> | python try.py
>
> Ok, good. Some minor remarks:
>
> Personally, I always use:
>
>   #!/bin/sh
>
> instead of requiring bash. All UNIX systems have sh, bash is only
> common. And even when present, it may not be in /bin. /bin/sh is
> always there, and unless you're doing something quite unusual, it
> works just fine.
>
> | then i went on terminal -
> | and run crontab -e
> | and wrote-
> |   */2 * * * * bash /home/avin/cronJob/test.sh
> | and saved it.
>
> IIRC, this runs every two minutes. Good for testing, but not your original
> spec.
>
> Also, if you make the shell script (test.sh) executable you do not
> need to specify the interpreter. Treat your script like any other
> command! So:
>
>   chmod +rx /home/avin/cronJob/test.sh
>
> and then your cron line can look like this:
>
>   */2 * * * * /home/avin/cronJob/test.sh
>
> Also, treat your script the same way as your shell script, start
> it with a #!  like this:
>
>   #!/usr/bin/python
>
> Make it executable:
>
>   chmod +rx /home/avin/cronJob/try.py
>
> and then you don't need to say "python" in your shell script:
>
>   ./try.py
>
> (You need the ./ because the current directory is not in your command
> search path ($PATH).)
>
> | It's working fine.
> | but when I m using like
> |
> | import random
> | a = random.randrange(0, 59)
> | */a * * * * bash /home/avin/cronJob/test.sh
> | then it's showing error becose of varable 'a', so now how can i take
> | variable?
>
> I take it that this is your python program intended to schedule the two
> randomly timed runs?
>
> As a start, it must all be python. The first two lines are. The third line
> is
> a crontab line.
>
> So as a start, you need to look more like this:
>
>   #!/usr/bin/python
>   import random
>   a = random.randrange(0, 59)
>   cronline = '*/%d * * * * /home/avin/cronJob/test.sh' % (a,)
>   print(cronline)
>
> At least then you can see the cron line you're making. It still
> does not add it to a cron job.
>
> Some remarks:
>
> - randrange() is like other python ranges: it does not include the end
> value.
>   So your call picks a number from 0..58, not 0..59.
>   Say randrange(0,60). Think "start, length".
>
> - My recollection is that you wanted to run a script twice a day at random
> times.
>   Your cron line doesn't do that.
>
> - If you're picking random run times you want to schedule a once-off
>   job for each to run at a particular times. Cron schedules repeating
>   jobs.  To run at a particular time you want an "at" job.
>
> - You need to do one of two things in the pick-a-time script:
>     - pick a time, then sleep until that time and then directly
>       invoke the try.py script
>   or
>     - pick a time, then use the "at" command to schedule the try.py
>       (or test.sh) script.
>
> The first approach would look a bit like this (totally untested):
>
>   #!/usr/bin/python
>   import random
>   import subporcess
>   import time
>   # choose range time in the next 24 hours
>   when = random.randrange(0, 24 * 3600)
>   # sleep that many seconds
>   time.sleep(when)
>   subprocess.call(['/home/avin/cronJob/test.sh'])
>
> For two runs, pick two times. Swap them into order. Sleep twice,
> once until the first time and then once until the second time. Etc.
>
> The second approach (using "at") would not sleep. instead, compute
> (using the datetime module) the date and time each job should run,
> and invoke "at" using the subprocess module, piping the text
> "/home/avin/cronJob/test.sh\n" to it.
>
> Cheers,
> --
> Cameron Simpson <cs at zip.com.au>
>
> On a related topic, has anyone looked at doing a clean-room copy of CSS
> a la RC2 and RC4 a few years back?  I know one or two people have
> looked at this in an informal manner, but we couldn't find anyone who
> hadn't already seen the DeCSS code to act as the clean person (it says
> a lot for the status of their "trade secret" that we couldn't actually
> find anyone who didn't already know  it).
>         - Peter Gutmann <pgut001 at cs.auckland.ac.nz>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20130521/90d11f5d/attachment.html>


More information about the Python-list mailing list