This example shell scripts shows how to
- use the ecfsdir command to save and retrieve a complete Unix directory as one ECFS file and
- print the ecfs_audit file using ecat:
#!/bin/bash # # **************************** LICENSE START *********************************** # # Copyright 2021 ECMWF. This software is distributed under the terms # of the Apache License version 2.0. In applying this license, ECMWF does not # waive the privileges and immunities granted to it by virtue of its status as # an Intergovernmental Organization or submit itself to any jurisdiction. # # ***************************** LICENSE END ************************************ # # ecfs2 USER SERVICES NOVEMBER 2021 - ECMWF # # # This shell-script: # # - retrieves MARS data into multiple target files # - save and retrieve a complete Unix directory (containing the # output of the MARS request) as one ECFS file using ecfsdir # - uses the ECFS temporary domain ectmp: # - prints the ecfs_audit file using ecat # # This shell script produces the standard output file # # ecfs2.<JOB-ID>.out # # in the workdir directory, containing the log of job execution. # # #------------------------------- # setting options for SLURM #------------------------------- # Options that are specified within the script file should precede the # first executable shell command in the file. # All options, which are case sensitive, are preceded by #SBATCH. # These lines become active only when the script is submitted # using the "sbatch" command. # All job output is written to the workdir directory, by default. #SBATCH --qos=ef # Specifies that your job will run in the queue (Quality Of # Service) "ef". #SBATCH --job-name=ecfs2 # Assigns the specified name to the request #SBATCH --output=ecfs2.%j.out # Specifies the name and location of STDOUT where %j is the job-id # The file will be # written in the workdir directory if it is a # relative path. If not given, the default is slurm-%j.out in the # workdir. #SBATCH --error=ecfs2.%j.out # Specifies the name and location of STDERR where %j is the job-id # The file will be # written in the workdir directory if it is a # relative path. If not given, the default is slurm-%j.out in the # workdir. #SBATCH --chdir=/scratch/... # Sets the working directory of the batch script before it is # executed. #SBATCH --mail-type=FAIL # Specifies that an email should be sent in case the job fails. # Other options include BEGIN, END, REQUEUE and ALL (any state # change). #SBATCH --time=00:05:00 # Specifies that your job my run up to HH:MM:SS of wall clock # time. The job will be killed if it exceeds this limit. If # time is not defined, the default limit for the queue (qos) # will be used. #------------------------------- # setting environment variables #------------------------------- export PATH=$PATH:. # Allows you to run any of your programs or # scripts held in the current directory (not # required if already done in your .user_profile # or .user_kshrc) set -ev #------------------------------- # commands to be executed #------------------------------- cd $SCRATCHDIR # See keyword initialdir above. # All the files created in this directory will be # deleted when the job terminates. #------------------------------- # MARS request #------------------------------- # The following MARS invocation retrieves pressure level analysis for # the four main synoptic hours, storing them in four different target # files, one per synoptic time: mars <<EOF retrieve, class = od, stream = oper, type = an, expver = 1, levtype = pl, levelist = 1000/850/700/500/400/300, grid = 2.5/2.5, area = 75/-27.5/32.5/45, param = 129, date = -2, time = 0000/0600/1200/1800, target = "analysis.[time]" EOF if [ $? != 0 ] # Check for the exit code returned from MARS. then echo " The MARS request failed!" exit 1 fi #------------------------------- # ECFS commands # (For more information type: man ecfs) #------------------------------- echo " #======================================================================# # Please note that in general plain MARS data should not be # # re-archived in ECFS! Unless you have done a considerable amount of # # post-processing it is more efficient to retrieve the data from MARS # # again. # #======================================================================# " epwd ec: # Show the current ECFS working directory # when the job starts (default ec:/uid) ecd ectmp: # Set the environment variable EC_TMPDIR used # to maintain the current working directory # in the temporary ectmp: domain to the # default value uid. # Files in the ectmp domain will be # AUTOMATICALLY DELETED after 90 days! epwd ectmp: # Return the value of the current ECFS working # directory in the specified domain els -l ectmp: # Show the contents of the ECFS directory # ec:/uid. The leading characters * b - indicate # the following: # *: file in TSM # b: file in HPSS with backup # -: file in HPSS without backup ecfsdir $SCRATCHDIR ectmp:ex1.ecfsdir # Save the complete directory # $SCRATCHDIR into the ECFS file # ectmp:/uid/ex1.ecfsdir els -l ectmp: # Show the contents of the ECFS # directory ectmp:/uid. After the # execution of the previous command # the file ectmp:/uid/ex1 is present ecfsdir ectmp:ex1.ecfsdir $SCRATCH/ex1_ret # The ECFS file ectmp:/uid/ex1.ecfsdir # is retrieved and the content written # to the UNIX directory # $SCRATCH/ex1_ret. If # $SCRATCH/ex1_ret already exists the # 'ecfsdir' command will fail (unless # you use the -o option). if [ $? != 0 ] # check ecfsdir exit code then echo " The ECFSDIR command has failed." exit 1 fi ls -al $SCRATCH/ex1_ret # Show the contents of the directory # $SCRATCH/ex1_ret erm ectmp:ex1 # Remove the ECFS file ectmp:/uid/ex1 ecat ec:ecfs_audit - # Print the content of the ecfs_audit file # using the ecat command #------------------------------- # tidy up by deleting unwanted files #------------------------------- # This is done automatically when using $SCRATCHDIR but /bin/rm -r $SCRATCH/ex1_ret exit 0 # End of example job 'ecfs2'