RUSH RENDER QUEUE
(C) Copyright 1995,2000 Greg Ercolano. All rights reserved.
V 102.40f 01/23/03
Strikeout text indicates features not yet implemented


TD Frequently Asked Questions



  1. How can I use padded frame numbers (0000) in my render script?
  2. My renders are coming up 'FAIL'. How do I figure out what's wrong?
  3. How do I have rush automatically retry frames? How do I set the number of retrys?
  4. My job isn't starting renders on my cpus. What's going on?
  5. How do I set up my submit script to only render on certain platforms or operating systems?
  6. How can I render several frames in one process using rush?
  7. My job has its 'k' flag set; why isn't it bumping off other jobs' frames?
  8. Is there an easier way to set the RUSH_JOBID environment variable?
  9. What does 'rush' stand for?
  10. Can my render script detect being 'bumped' by higher priority jobs?
  11. Can I chain separate jobs together, so that one waits for the other to get done?
  12. Is it possible to use negative frame numbers in rush?
  13. Is there a way to see just the cpus busy running my job?
  14. Is there a way to see what jobs a machine is busy rendering?
  15. Is there a way to requeue a busy frame for a host that is down?
  16. How do I list all the machines in a hostgroup?
  17. Why is rush creating files owned by 'ntrush'?
  18. Why are there weird file permissions on my rendered images?
  19. Is there a way to start a job at a particular time?
  20. Under Windows, why are UNC paths better than drive letters?
  21. How do I make UNC paths work the same on Windows and Unix?


How can I use padded frame numbers (0000) in my render script?
Use $RUSH_PADFRAME, it is created for you automatically to do 4 digit padding.

To do your own custom frame number padding, use this unix technique:

    set padframe = `perl -e 'printf("%04d",$ENV{RUSH_FRAME});'`
To use different padding widths, just change the '4' (in '%04d') to a different number.

My renders are coming up 'FAIL'. How do I figure out what's wrong?
The most common problem is a render script that does not properly handle returning exit codes. Make sure your render script is correctly returning an appropriate render script exit code: 0=OK, 1=FAIL, 2=RETRY.

Also, check the frame logs being generated by your render script. Frame logs contain the error messages for each rendered frame which should help you determine the problem. Make sure your submit script has LogDir pointing to a valid directory, which is where your frame logs will be found.


How do I have rush automatically retry frames? How do I set the number of retrys?
See Retrying Frames.

My job isn't starting renders on my cpus. What's going on?
Use 'rush -lc' and check the Notes column for messages.

If you know the remote cpus aren't just busy with other jobs, then list your cpus and check the 'NOTES' column to see if the system is giving you reasons why your cpus are being rejected. 

The job might be in Pause, there are no more frames to render, all the available machines don't have as much ram as your job needs, etc. Here are some typical situations:

[erco@howland]% rush -lc
CPUSPEC[HOST]        STATE       FRM  PID     JOBTID  ELAPSED  NOTES
placid=3@100k        Idle        -    -       1       00:04:37 Job state is 'Pause'
tahoe=1@1            Idle        -    -       2       00:02:08 No more frames
superior=1@1         Idle        -    -       3       00:02:08 Not enough ram
waccubuc=1@1         Idle        -    -       4       00:02:08 This is a 'neverhost'
ontario=1@1          Idle        -    -       5       00:02:08 Failed 'criteria' check

How do I set up my submit script to only render on certain platforms or operating systems?
Use the Criteria submit script command.

This command allows you to build a list of platforms, operating systems, or other general criteria to limit which machines will run your renders.

You can see the different criteria names in the output of 'rush -lah'. It is up to your sysadmin to maintain the criteria names.


How can I render several frames in one process using rush?
With clever scripting. See Batching Multiple Frames for how to render several frames at a time.

Sometimes it pays to render several frames at a time rather than one at a time, to decrease the amount of time the renderer spends loading files.

If you have existing script filters which monitor the progress of renders to determine which frames are rendering, you can probably easily modify these scripts to work with rush to reflect changes in the frame list, using either frame notes (rush -notes) or frame state change operations (rush -que/rush -done). 


My job has its 'k' flag set; why isn't it bumping off other jobs' frames?
For a job to bump another off a cpu, these things must be true: When a frame is bumped, the bumped frame will show a message in its frame list indicating the job that bumped it, e.g.:
% rush -lf erie-790
STAT FRAME TRY HOSTNAME PID   ELAPSED  NOTES
Run  0100  0   tahoe    10290 00:00:26 
Run  0101  0   tahoe    10291 00:00:26 
Que  0102  1   tahoe    10292 00:00:09 Bumped by ralph's superior-791,KILLER @300ka
Que  0103  0   -        0     00:00:00 
[..]

Is there an easier way to set the RUSH_JOBID environment variable?
You can use eval `submit` to automatically set it, or a simple alias to set it manually. However, cutting and pasting the 'setenv' command is not so hard.

Some people like to use this alias to make it easy to set new jobid variables:

Then you can use it on the command line to set one or more jobids:
If you want to have the RUSH_JOBID variable set automatically in your shell whenever you invoke your submit script, then use 'eval':
...the shell automatically parses the 'setenv RUSH_JOBID' command rush prints on stdout when a job is successfully submitted. Error messages are not affected by 'eval', so you don't have to worry about losing error messages when using this technique.


What does 'rush' stand for?
Rush is not an acronym, it was named after film 'rushes', and the fact effects people are usually in a rush to get things done.

Can my render script detect being 'bumped' by higher priority jobs?

    #!/bin/csh -f
    ..
    if ( -e /somewhere/$RUSH_FRAME.busy ) then
	echo We are picking up a frame that was killed.
	echo Do pickup stuff here..
    endif

    # Create a 'busy' file for this frame
    #    If we are bumped, busy file is left behind 
    #    so that the above logic can detect it.
    #
    touch /somewhere/$RUSH_FRAME.busy
    echo Do rendering here..
    rm -f /somewhere/$RUSH_FRAME.busy
  


Can I chain separate jobs together, so that one waits for the other to get done?
Yes, see the submit script command WaitFor to have a job wait for others to dump before starting.

Also, see DependOn to have a job wait for frames in another job to get done, i.e., rather than wait for the entire job to complete.


Is it possible to use negative frame numbers in rush?
No. You are evil.

If you are trying to include 'handles' and 'slates' by using negative numbers, don't.


Is there a way to see just the cpus busy running my job?
Yes. In Unix:

   rush -lc | grep Busy
   rush -lf | grep Run
   

...and on WinNT, if you don't have grep(1):

   rush -lc | findstr Busy
   rush -lf | findstr Run
   


Is there a way to see what jobs a machine is busy rendering?
In Unix:

   rush -tasklist host | grep Busy
   

..and on WinNT, if you don't have grep(1):

   rush -tasklist host | findstr Busy
   


Is there a way to requeue a busy frame for a host that is down?
If a machine goes down while rendering a frame, the frame stays in the Busy state until the machine is rebooted. Once rush realizes the remote machine rebooted, it requeues the frame.

But if the machine never reboots, the frame will stay in the Busy state indefinitely, unless you take the following action.

Assuming you're *sure* the machine is down, and not just 'slow', use the following command:

    % rush -down hosta hostb
    

...where 'hosta' is the name of the machine that is down, and 'hostb' is the name of the machine that's the server for the job(s) with the hung frame(s).

Beware; if the remote machine is not really down, and is still running the frame, doing the above will start the frame running on another machine, and the two frames will overwrite each other.


How do I list all the machines in a hostgroup?
Just grep the output of 'rush -lah', or parse the contents of the $RUSH_DIR/etc/hosts file.

For instance, to print all the hosts in the "+foo" hostgroup:

    rush -lah | grep +foo
    
...or to precisely parse them from the hosts file with awk (which you should be able to cut and paste into a Unix tcsh shell):

    awk 'BEGIN { s="+foo"; } 					\
	 { if (match($0,"^#")) next; n = split($5,arr,",");	\
	   for (i=1; i<=n; i++) { 				\
	       if(arr[i]==s) { print $1; break; } 		\
	   }							\
	 }' < /usr/local/rush/etc/hosts
  

Why is rush creating files owned by 'ntrush'?


Why are there weird file permissions on my rendered images?


Is there a way to start a job at a particular time?


Under Windows, why are UNC paths better than drive letters?


How do I make UNC paths work the same on Windows and Unix?