Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling

Cron jobs in Perl

by ronash (Initiate)
on Aug 02, 2011 at 12:56 UTC ( [id://918046] : perlquestion . print w/replies, xml ) Need Help??

ronash has asked for the wisdom of the Perl Monks concerning the following question:

Dear Monks, Suppose that for some reason (maybe to piss off my neighbour?) I would like to send an email to a previously chosen address every hour, containing the famous "Hello world!" phrase.
I understood that I needed to use something called Cron jobs. I looked it up on Wikipedia and it seems like the right thing to do.

The sad thing is that I have absolutely no idea about Cron jobs; I can only programme (a bit!) in Perl.

So, can someone please give me a free service to run Cron jobs with Perl, and some general instructions on how to do that? Please keep in mind that I know nothing about Cron jobs.

Thank you very much in advance,

Replies are listed 'Best First'.
Re: Cron jobs in Perl
by jacaril (Beadle) on Aug 02, 2011 at 13:29 UTC

    Cron itself is a task scheduler for linux/unix. Schedule::Cron available on cpan may be useful, though you should find a better use for it then spamming your neighbor.

Re: Cron jobs in Perl
by ww (Archbishop) on Aug 02, 2011 at 13:18 UTC
    You may find some useful information in the thread beginning at Win32::Taskscheduler failed to install on win7...
    or by using this Super Search.

    But, whoa, before you charge off to read those, you may want to know a bit about the Monastery and its customs -- chief among them being that we consider it our mission to help you learn Perl... NOT to provide "a free service to run Cron jobs..." nor any other free service except those directly related to the Monastery's mission.

    So, please also read On asking for help, How do I post a question effectively?, I know what I mean. Why don't you? and (for good measure, on the theory you may someday soon want to ask an appropriate-for-this-site question) Markup in the Monastery
        (hint 1: You don't tell us, explicitly, that you're using some version of Windows, even though that appears likely... but we're more likely to be on-target with replies if we know for sure.
        hint 2: inserting <br/> between </p> and <p> is unnecessary [and ugly, IMO] to create blank lines between paras).

Re: Cron jobs in Perl
by JavaFan (Canon) on Aug 02, 2011 at 14:48 UTC
    There's nothing special about cron jobs running in Perl. Cron doesn't give a penny in which language the cron job is written in. Write your program to send email (obviously, the program shouldn't be interactive), and then read man crontab to see what you need to do to run it once an hour.
Re: Cron jobs in Perl
by tweetiepooh (Hermit) on Aug 02, 2011 at 14:13 UTC

    You may not need to use an external scheduler at all. Why not look up Perl's "sleep" command and see if you can get the same functionality all within Perl.

    I have scripts that both repeat within Perl and also in a wrapper script that restarts the script should it fail or end.

    I do use cron for some jobs. One thing to think about is what happens if your scheduler tries to run the program before it completes the last run. (This is not likely an issue in your case.) Another gotcha to be wary of is the run time environment. Will it be the same under a scheduler as from the prompt? Does it matter if not?

      The 'sleep' idea is fine if you don't care whether it still runs should the system reboot. If you are using unix/linux, you actually have at least 2 options that I know of - cron and the 'at' queue. The 'at' queue is sometimes preferable if you are running a job a little less frequently (once per day or less), and you always want it to run. With cron, if the system happens to be down when the cron job is scheduled to run, when the system comes back up, it will only run on the next interval. If you use 'at', then any job on the queue who's time is past when the system comes back up is run immediately. It is pretty easy to write a script that, as it's last action, re-queues itself on the 'at' queue for the next interval. It all depends on what you are trying to achieve.


Re: Cron jobs in Perl
by DrHyde (Prior) on Aug 03, 2011 at 09:50 UTC
    You already have such a service, on your own machine. To find out more, type man cron and man 5 crontab.