TaskForest
A simple, expressive, open-source, text-file-based Job Scheduler with console, HTTP, and RESTful API interfaces.
Documentation
  1. Downloading TaskForest
  2. Installing TaskForest
  3. Configuring TaskForest
    1. Jobs & Families
    2. Calendars
    3. Automatic Retries
    4. Sending Emails
    5. Options
    6. Configuration File
  4. Running TaskForest
  5. Running the TaskForest Web Server
  6. Web Server Security
  7. Checking TaskForest Status
  8. Rerunning a Job
  9. Marking a Job
  10. Tokens
  11. Releasing all Dependencies from a Job
  12. Putting a Job on Hold
  13. Releasing a Hold Off a Job
  14. HOWTO
  15. The RESTful Web Service
  16. Frequently Asked Questions (FAQ)
  17. Bugs
  18. Change Log
  19. Author
  20. Acknowledgements
  21. Copyright

HOWTO

This is the kind of line I have in my crontab:

02 00 * * * /a/b/taskforest --config_file=/b/c/taskforest.cfg

Please make sure you read the section entitled "Web Server Security" for important security considerations.

Having said that, : The userids and passwords are specified in the configuration file using the same format as Apache's .htpasswd files. You can see commented-out examples of this in the configuration file taskforestd.cfg. For your convenience, the TaskForest distribution includes a program called gen_passwd that generates text that you can copy and paste into the config file:

gen_passwd foo bar

The above command will print out somthing that looks like the following;

foo:4poVZGiAlO1BY

This text can then be copied and pasted into the configuration file.

Make sure you stop the server and restart it after making any changes to the configuration file.

To start the web server, run the taskforestd program with the --config_file and --start options. For example:

taskforestd --config_file=taskforestd.cfg --stop
        
OR
        
taskforestdssl --config_file=taskforestd.cfg --stop

To stop the web server, run the taskforestd program with the --config_file and --stop options. For example:

taskforestd --config_file=taskforestd.cfg --stop

OR
        
taskforestdssl --config_file=taskforestd.cfg --stop

This is what works for me (instructions found at http://www.modssl.org/docs/2.8/ssl_faq.html#ToC25 ).


1) Create a server key

openssl genrsa -des3 -out server.key.en 1024

2) Make a decrypted version of it

openssl rsa -in server.key.en -out server-key.pem

3) Create a CSR (Certificate Signing Request)

openssl req -new -key server-key.pem -out server.csr

4) Create a CA Private Key

openssl genrsa -des3 -out ca.key.en 1024

5) Create a decrypted version of it

openssl rsa -in ca.key.en -out ca.key

6) Create a 10-yr self-signed CA cert with the CA key

openssl req -new -x509 -days 3650 -key ca.key -out my-ca.pem

7) Sign the CSR

sign.sh server.csr

   The sign.sh program can be found in the
   pkg.contrib/ subdirectory of the mod_ssl
   distribution.  It is not clear whether or not I
   can include that script in this distribution,
   so for now at least, you'll have to use your
   own copy.  Make sure you specify the locations
   of the files in the taskforestd configuration
   file.

Let's say you have a job J4 that depends on 3 other jobs - J1, J2 and J3. Normally, that setup is fine, but today you really want the job to run now. You don't care whether J1, J2 and J3 run successfully or not, as far as J4 is concerned. What you need to do is release all the dependencies off J4. You also don't want to make a permanent change to the family file.

This means that regardless of what job dependencies or time dependencies J4 has, when you release all its dependencies, it will run the very next time TaskForest checks to see if there are any jobs that need to be run (determined by wait_time). It's as if those dependencies never existed.

A release 'request' is only valid once - once J4 runs, the system has no 'memory' of the fact that J4's dependencies were released. It will not change the behavior of the rest of the family. If J5 depends on J4, then J5 will be ready to run, even if J1, J2 and J3 haven't run yet. To release all dependencies from a job, run the following command:

release --log_dir=l_d --job=Ff::Jj --family_dir=f_d

where l_d is the log directory and Ff is the family name and Jj is the job name and f_d is the family_directory. Dependencies on a job will only be released if the job is in the 'Waiting' state.

You can also use the "Release" button on the 'Status' or 'View Logs' page on the web site to release all dependencies off a job.

Remember: no changes are made to the Family file. So next time this family runs, J4 will still depend on J1, J2 and J3, just like it always did.

To temporarily prevent a job from running, you need to put it on hold. When you put a job on hold, it will not run even if all its dependencies are met. It will only be run after the hold is released. Even after the hold is released, its dependencies need to be met (or you need to force a run by releasing all dependencies). To hold a job, enter the following command: