I hate 'clever' programmers (Revenge of the Mover)
-
Found in another mover script. This one processes the secondary data feed (the other one I showed the other day is for the primary.) This one is doing something wonderful, somehow checking to see if the primary data feed has had files in the past N minutes, and if it hasn't seen data in that amount of time, use the secondary data feed's input and dump it into the application's input queue(s). I'm still trying to figure out how it works. At the top, I found this which, while I understand what it is doing, I don't yet understand why:
#!/bin/csh -f
.
.
.
set LOGFILE = /app/logs/redundancy_mover.log
set APP_REDUNDANCY_FILE = /tmp/APP_REDUNDANCY_FILE
set TIMESTAMP =date +'%m-%d-%Y %H:%M: '
if ( -e ${APP_REDUNDANCY_FILE} ) THEN
touch -tperl -e '$d = time(); $d -= 1800; @f = localtime($d); printf "%02d%02d%02d%02d%02d", $f[5]+1900, $f[4], $f[3], $f[2], $f[1];'
${APP_REDUNDANCY_FILE}_tmp
set lastfiles=`find ${APP_REDUNDANCY_FILE} -newer ${APP_REDUNDANCY_FILE}_tmp
rm ${APP_REDUNDANCY_FILE}_tmp
if ($#lastfiles > 0) then
echo "$TIMESTAMP already running, stopping..." >>! ${LOGFILE}
exit
else
echo "$TIMESTAMP Last run errored out, continuing..." >>! ${LOGFILE}
endif
else
touch ${APP_REDUNDANCY_FILE}
endif.
.
.
So, if the redundancy file exists, create a file with the date 1800 seconds (minutes?) ago and grab a list the files in the directory which are newer than that. If that list has values, then oops! We're already running. Quit now. If the list of files is empty, then the script was aborted part way through last time, so continue and give it another go.
If the redundancy file doesn't exist, create it for the next time through.
Is the redundancy file acting as a lock file to keep the program from running again? If so, why the hell name it APP_REDUNDANCY_FILE instead of, oh, I dunno, APP_LOCK_FILE?
TRWTF is Solaris for not having a find command with a minute-granular -mtime parameter.
-
Apart from the variable name and the data race, I really like that and the original writer was absolutely certain that the script will never ever run longer then 1800 seconds.
-
@m said:
Apart from the variable name and the data race, I really like that and the original writer was absolutely certain that the script will never ever run longer then 1800 seconds.
$10 says that a previous version of the script had "$d -= 300;" because the script will never ever run longer than 5 minutes :-).
-
According to both you the runtime of the script differ
-
Joke's on all of us!
There's a "sleep 120" command later in the script ...
-
TRWTF is invoking a Perl one-liner from a CSH script, instead of writing the whole thing in Perl.
Seriously, even Perl is better than CSH.