Sponsored Content
Top Forums Shell Programming and Scripting Help me add Error Handling to my script Post 302681849 by agama on Saturday 4th of August 2012 03:39:07 PM
Old 08-04-2012
A couple of things that jump out at me immediately. First, what you intend to be a cat command to use as input to your loop won't actually execute the command. You'd need to put it into a form that the shell will interpret as 'execute this', but there is a better way.

Secondly, be careful using $? anywhere other than immediately following the execution of a command. In your continue function if you were try to use your exit statement, the value of $? would be the return of the print, not the value you intended.

Lastly, I would ensure that at least the host name is output in any message. It would be very frustrating as an operator/user to have the message "can't start NAS" and not know where.

This isn't exactly how I would have done it, but keeping with your general theme this should do what you intend:

Code:
# pass in the status to check as $1; the res of the parameters are the message if
# the status wasn't good
#
function on_error_continue
{
    rc=$1           # snag the exit code passed in

    if (( $rc > 0 ))
    then
        print "$2"
        #exit $?        # using $? here will be the exit code of the print; use exit $1 
    fi
}

#for hostname in cat hostfile   # this will not work -- it will run the loop for "cat" and "hostfile" and won't cat the hostfile
while read hostname
do
    rcp $DEPLOY $hostname:/var/tmp/$TYPE
    on_error_continue $? "Could not remote copy to $hostname"
    rsh $hostname "nice -n 39 ksh /var/tmp/$TYPE &"
    on_error_continue $? "Could not mount the NAS on $hostname"
done <hostfile   # read directly from hostfile; no need to use cat


Last edited by agama; 08-04-2012 at 04:45 PM.. Reason: added comment; cleaned up just a bit
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Error Handling

Helo Experts, I need a help in handling errors in shell script, wants my errors displayed in text file instead of command window.. My shell script is here; cd /cygdrive/s/Files for FILES in ./*.* do temp=`basename $FILES` if cp $FILES /cygdrive/r/CopyFile1/$FILES; then echo "copy... (5 Replies)
Discussion started by: CelvinSaran
5 Replies

2. Shell Programming and Scripting

Finger and error handling

I have this segment of code : cmd = "finger -m " $1 " 2>/dev/null | head -1" cmd | getline userinfo close(cmd) Sometimes finger returns no such user when given a user id. With the redirection to the default trash file i am getting rid of any screen "finger:no such user" messages. I also want... (2 Replies)
Discussion started by: beatblaster666
2 Replies

3. Shell Programming and Scripting

Issue with Error handling,not able to continue the script further

Hi, I am trying to write a script to cleanup files in a log directory .. cd log find Datk** -mtime +7 -exec rm -f {} \; 2> /dev/null Have used the above to clean up files in log directory more then 7 days older. The file can be something like ( auto-generate by some processes and... (2 Replies)
Discussion started by: nss280
2 Replies

4. Shell Programming and Scripting

Help with Error Handling on Script

Hi, I need your guys help again. I run a script which check for some process status in a loop. when i check the process some of the process could throw an error, how can i check that inside my script. Thanks, RR (3 Replies)
Discussion started by: rrb2009
3 Replies

5. Shell Programming and Scripting

PERL error handling

I have a PERL command line embedded in a UNIX script. The script doesn't handle errors coming out of this command. I'm processing large files and occassionally I run out of disk space and end up with half a file. perl -p -e 's/\n/\r\n/g' < TR_TMP_$4 > $4 How do I handle errors coming out... (1 Reply)
Discussion started by: OTChancy
1 Replies

6. Shell Programming and Scripting

Error Handling

Below code works for different databases i.e. MYSQL and ORACLE The problem is for MYSQL in Block: if ; $? taking value accordingly but in case of ORACLE $? is always taking this value as zero (0). That is the reason in Oracle it always going in else Block in any case.. :( and in case of ... (4 Replies)
Discussion started by: ambarginni
4 Replies

7. Shell Programming and Scripting

Expect Script Error Handling

Good Day Everyone, I was hoping to get a little insight into an expect script that I've written. Basically we have this expect script to perform an sftp upload, key authentication is not an option, and sftp is the only method supported by our vendor, thus the need for this. I want to be... (3 Replies)
Discussion started by: thaller
3 Replies

8. Shell Programming and Scripting

Error handling

Hello fellow UNIX gurus :) I have a problem regarding the script below: # Variables used in this shell. power=0 # Stores squared integer total=0 # Sum of all squared integers num=0 # Stores command line arguements # Provides error handling if command line... (5 Replies)
Discussion started by: Learn4Life
5 Replies

9. Shell Programming and Scripting

error situation handling when starting app from a script

Hi, in my bash script I start 3rd party app that runs quickly normally and returns some data that I use later for processing. However if there are problems the app doesn't return anything and just hangs... then my script also hangs of course, awaiting for the app to comeback. Was wondering how to... (3 Replies)
Discussion started by: TomSu
3 Replies

10. Shell Programming and Scripting

Script FTP maintain error handling

Hi, I have ftp script like below How to insert an error handling, If the transfer failed then send mail to me. Actually, I just need the script to send an email if the FTP failed. How to put the email script within FTP script? Thank You Edy (5 Replies)
Discussion started by: edydsuranta
5 Replies
rcp(1)								   User Commands							    rcp(1)

NAME
rcp - remote file copy SYNOPSIS
rcp [-p] [-a] [-K] [-x] [-PN | -PO] [-k realm] filename1 filename2 rcp [-pr] [-a] [-K] [-x] [-PN | -PO] [-k realm] filename... directory DESCRIPTION
The rcp command copies files between machines. Each filename or directory argument is either a remote file name of the form: hostname:path or a local file name (containing no : (colon) characters, or / (backslash) before any : (colon) characters). The hostname can be an IPv4 or IPv6 address string. See inet(7P) and inet6(7P). Since IPv6 addresses already contain colons, the hostname should be enclosed in a pair of square brackets when an IPv6 address is used. Otherwise, the first occurrence of a colon can be interpreted as the separator between hostname and path. For example, [1080::8:800:200C:417A]:tmp/file If a filename is not a full path name, it is interpreted relative to your home directory on hostname. A path on a remote host can be quoted using , ", or ', so that the metacharacters are interpreted remotely. Please notice that the kerberized versions of rcp are not IPv6-enabled. rcp does not prompt for passwords. It either uses Kerberos authentication which is enabled through command-line options or your current local user name must exist on hostname and allow remote command execution by rsh(1). The rcp session can be kerberized using any of the following Kerberos specific options : -a, -PN or -PO, -x, and -k realm. Some of these options (-a, -x and -PN or -PO) can also be specified in the [appdefaults] section of krb5.conf(4). The usage of these options and the expected behavior is discussed in the OPTIONS section below. If Kerberos authentication is used, authorization to the account is controlled by rules in krb5_auth_rules(5). If this authorization fails, fallback to normal rcp using rhosts occurs only if the -PO option is used explicitly on the command line or is specified in krb5.conf(4). If authorization succeeds, remote copy succeeds without any prompting of password. Also notice that the -PN or -PO, -x, and -k realm options are just supersets of the -a option. rcp handles third party copies, where neither source nor target files are on the current machine. Hostnames can also take the form username@hostname:filename to use username rather than your current local user name as the user name on the remote host. rcp also supports Internet domain addressing of the remote host, so that: username@host.domain:filename specifies the username to be used, the hostname, and the domain in which that host resides. File names that are not full path names are interpreted relative to the home directory of the user named username, on the remote host. OPTIONS
The following options are supported: -a This option explicitly enables Kerberos authentication and trusts the .k5login file for access-control. If the authorization check by in.rshd(1M) on the server-side succeeds and if the .k5login file permits access, the user is allowed to carry out the rcp transfer. -k realm Causes rcp to obtain tickets for the remote host in realm instead of the remote host's realm as determined by krb5.conf(4). -K realm This option explicitly disables Kerberos authentication. It canbe used to override the autologin variable inkrb5.conf(4). -p Attempts to give each copy the same modification times, access times, modes, and ACLs if applicable as the original file. -PO Explicitly requests new (-PN) or old (-PO) version of the Kerberos "rcmd" protocol. The new protocol avoids many security prob- -PN lems prevalant in the old one and is regarded much more secure, but is not interoperable with older (MIT/SEAM) servers. The new protocol is used by default, unless explicitly specified using these options or through krb5.conf(4). If Kerberos authorization fails when using the old "rcmd" protocol, there is fallback to regular, non-kerberized rcp. This is not the case when the new, more secure "rcmd" protocol is used. -r Copies each subtree rooted at filename; in this case the destination must be a directory. -x Causes the information transferred between hosts to be encrypted. Notice that the command is sent unencrypted to the remote system. All subsequent transfers are encrypted. USAGE
See largefile(5) for the description of the behavior of rcp when encountering files greater than or equal to 2 Gbyte ( 2^31 bytes). The rcp command is IPv6-enabled. See ip6(7P). IPv6 is not currently supported with Kerberos V5 authentication. For the kerberized rcp session, each user can have a private authorization list in a file .k5login in their home directory. Each line in this file should contain a Kerberos principal name of the form principal/instance@realm. If there is a ~/.k5login file, then access is granted to the account if and only if the originater user is authenticated to one of the principals named in the ~/.k5login file. Other- wise, the originating user is granted access to the account if and only if the authenticated principal name of the user can be mapped to the local account name using the authenticated-principal-name -> local-user-name mapping rules. The .k5login file (for access control) comes into play only when Kerberos authentication is being done. EXIT STATUS
The following exit values are returned: 0 All files were copied successfully. >0 An error occurred. See the NOTES section for caveats on the exit code. FILES
$HOME/.profile $HOME/.k5login File containing Kerberos principals that are allowed access /etc/krb5/krb5.conf Kerberos configuration file ATTRIBUTES
See attributes(5) for descriptions of the following attributes: +-----------------------------+-----------------------------+ | ATTRIBUTE TYPE | ATTRIBUTE VALUE | +-----------------------------+-----------------------------+ |Availability |SUNWrcmdc | +-----------------------------+-----------------------------+ |CSI |Enabled | +-----------------------------+-----------------------------+ SEE ALSO
cpio(1), ftp(1), rlogin(1), rsh(1), setfacl(1), tar(1), tar(1), in.rshd(1M), hosts.equiv(4), krb5.conf(4), attributes(5), largefile(5), krb5_auth_rules(5), inet(7P), inet6(7P), ip6(7P) NOTES
rcp is meant to copy between different hosts. Attempting to rcp a file onto itself, as with: example% rcp tmp/file myhost:/tmp/file results in a severely corrupted file. rcp might not correctly fail when the target of a copy is a file instead of a directory. rcp can become confused by output generated by commands in a $HOME/.profile on the remote host. rcp requires that the source host have permission to execute commands on the remote host when doing third-party copies. rcp does not properly handle symbolic links. Use tar or cpio piped to rsh to obtain remote copies of directories containing symbolic links or named pipes. See tar(1) and cpio(1). If you forget to quote metacharacters intended for the remote host, you get an incomprehensible error message. rcp fails if you copy ACLs to a file system that does not support ACLs. rcp is CSI-enabled except for the handling of username, hostname, and domain. When rcp is used to perform third-party copies where either of the remote machines is not running Solaris, the exit code cannot be relied upon. That is, errors could occur when success is reflected in the exit code, or the copy could be completely successful even though an error is reflected in the exit code. SunOS 5.11 23 Dec 2008 rcp(1)
All times are GMT -4. The time now is 10:53 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy