Tracking automated scripts

From UA Libraries Digital Services Planning and Documentation
Revision as of 09:05, 11 August 2016 by Cjchatnik (talk | contribs) (Checkscripts)


The "checkscripts" MySQL database currently resides on the libcontent server. This database is composed (currently) of two tables: "scripts" and "ran".

The scripts table contains the following information for each cron script that we depend upon for support of our infrastructure:

  1. id -- an identifying number, used by each script to log in when it runs
  2. scriptname (name of the script)
  3. server on which it resides
  4. directory in which it exists
  5. cron -- the crontab specification for when it runs
  6. runswhen -- a textual explanation of when it runs
  7. doeswhat -- a textual explanation of what the script does
  8. succeeds -- the name of scripts which must precede this one for it to do its job properly (dependencies)
  9. precedes -- the name of scripts which this script must precede in order for them to do their job properly (dependencies)

The "ran" table contains the entries made by each script after it completes its task, and before it exits. It contains:

  1. an auto-incrementing number for the database entry
  2. scriptid, the number of the script, which corresponds to the id number in the scripts table
  3. datestamp -- added automatically at the time of the entry
  4. errors -- a textual description of any errors encountered by the script during its run

As described in Watching Our Backs, Once a week, a script called "checkscripts" in /srv/scripts/cya looks through the entries in the checkscripts database for the past week, and compares them with the list of entries of existing cron scripts and when they are due to run. If any scripts did NOT run, which were scheduled, or any of them logged errors, this script sends emails to notify us of problems. Of course, this script also logs in with the checkscripts database to verify that it ran, and when.

Then, a third script ("checkscriptcheck" in /srv/scripts/cya) runs to verify that the checkscripts script ran as it should. Again, this one sends us any errors, and it logs in with the checkscripts database.

If there's problems with servers going down frequently, these three scripts can reside on three different servers. This helps track down what has/hasn't been taken care of, as well as notification of servers not functioning correctly.

How to add cronjobs

  1. Log in to root
  2. crontab -l > cronjobs
  3. vi cronjobs
  4. add time and full path and script
    1. example: 0 2 4 * * /srv/scripts/storing/storingSpreadsheets
  1. crontab cronjobs
  1. log into the database
  2. use checkscripts;
  3. show columns from scripts;
  4. select max(id) from scripts;
  5. Add new script to database
    1. Example: insert into scripts VALUES(null, "storingSpreadsheets", "", "/srv/scripts/storing", "0 2 4 * *", "4:02 am", "Checks S:/Digital Projects/Administrative/collectionInfo/JodyPickup for updated Metadata Spreadsheets and makes a version copy and puts it in the archive directory", NULL, NULL);
  6. Check it: select * from scripts where id like "##";
  7. Check what's there: select scriptname from scripts order by scriptname;
  1. Go back to script and add database call copy from another script this is not entirely accurate
    1. Example:

$mynum = "##";

$username="lookitup"; $password="lookitup";

$dbh = DBI->connect ("database things look it up in another script", $username, $password) or &sendmessage;


sub sendmessage{