Crontab on CS managed machines

This page describes how to run jobs from crontab on CS managed machines and from AFS home directories. The instructions are adopted from https://cs.stanford.edu/computing-guide/data-storage-sharing/afs/batch-and-cron-jobs.

Only CS managed machines

Please note that this will only work on CS managed machines, e.g. Hulk, Rocky.

1. Init your keytab

Run akcron to initialize your keytab file:

akcron -i

2. Test if you received the tokens

It is always good to see if we received the necessary tokens. Do it with the following command:

akcron -c tokens

Your output should be similar to this:

Tokens held by the Cache Manager:

User's (AFS ID 70223) tokens for afs@cs.stanford.edu [Expires Aug 23 19:19]
   --End of list--

If there is an error please let Andrej know about it.

3. Directory permissions

The command you ran on step 1 actually creates a new special user with the following name:

your_csid.cron

Since this is a new user, you need to grant it the rights to whatever directories your crontab script requires access to. Say I had a script called HulkCron.sh that was in the directory ~/HulkCron/. If I wanted to run that with ak cron I would set up my permissions like this:

fs setacl ~/ your_csid.cron read
fs setacl ~/HulkCron/ your_csid read

If my script is actually doing something useful and I want to save the output of that script to a file, I would define the ACLs for the ~/HulkCron/ directory like this:

fs setacl ~/HulkCron/ your_csid write

Listing permissions

I can check the permissions I have set like this:

fs listacl ~/HulkCron/

The output of the command could be similar to this:

Access list for /afs/cs.stanford.edu/u/akrevl/HulkCron/ is
Normal rights:
  system:administrators rlidwka
  akrevl rlidwka
  akrevl.cron rl

This means that user system and group administrators has rlidwka permission. Users akrevl and akrevl.cron also kave a rlidwka permission. That doesn't say much, so let's have a look at what those letters mean:

Shorter commands

You can use the shorter form of commands in the fs utility. You can replace listacl with la, setacl with sa, etc.

Recursively setting permissions

It seems that there is no chmod -R command, but we can somehow manage with the rest of the GNU toolkit. Here is how we can set permissions on all the subdirectories of ~7z directory:

find ~/7z/ -type d -exec fs setacl {} akrevl.cron read \;

You may void your warranty

Bad things will happen if you this on recursively mounted filesystems. So make sure that you are only executing this in your own directories that do not contain links to any other filesystems.

Temporary files

Make sure that your permissions are correctly set also for the directories where the temporary files are stored. You might want to check if your new special user (your_csid.cron) has the necessary permissions on the local filesystem e.g. /tmp.

Special note for 7z users

7z might sometimes use temporary files. These are created in /tmp by default. You can override this with the -w switch, for example:

~/bin/7za a -w/afs/cs.stanford.edu/u/akrevl/HulkCron/ ~/HulkCron/ParadiseLost.7z ~/HulkCron/ParadiseLost.txt

Please note that -w does not understand the ~ shorthand for your home directory.

Also note that your_csid.cron will need access to the 7z binary and all the libraries associated with it.

4. Setup your crontab

Now you can set up your crontab as you normally would:

crontab -e

But make sure that you prefix your command/script with akcron and put it in some single quotes. For example:

0 3 * * * akcron -c '~/HulkCron/backupMyFiles.sh'