Sponsored Content
Top Forums Shell Programming and Scripting need help to create the script Post 302407341 by m1xram on Thursday 25th of March 2010 06:53:11 AM
Old 03-25-2010
waiting

The service should write its process ID (PID) to a file in a known location. A lot of processes create a file in /var/run called PROGRAM.pid where PROGRAM is the same name as the service.

With that information we see if the service is running, attempt to kill it, wait to see if it dies and then we can move on.

Code:
# This has not been tested.
myservice=PROGNAME
pidfile=/var/run/$myservice.pid
if [ -e $pidfile ]; then
  myservicepid=$(cat $pidfile)
  # Kill service
  kill $myservicepid
  for (( i=0; $i < 10; ++$i )) ; do
    # Wait for it to end.
    status=$(ps h -o cmd -p $myservicepid)
    if [ $status == "" ]; then
      # The process has terminated.
      break
    fi
    sleep 6
  done
  # How did every thing go?
  if [ $status != "" ]; then
    # Can't stop it, give up.
    echo "Error: can not halt $myservice, PID=$myservicepid"
    echo
    exit 1
  fi
fi

When a service starts it should also check for the PID file because the process may already be running. If the file doesn't exist it can start. Upon starting it should create the PID file.

What happens in between stopping and starting can be done at your leisure. Just what is the purpose of moving the application? Every other app in Linux is restarted in place.
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

create a shell script that calls another script and and an awk script

Hi guys I have a shell script that executes sql statemets and sends the output to a file.the script takes in parameters executes sql and sends the result to an output file. #!/bin/sh echo " $2 $3 $4 $5 $6 $7 isql -w400 -U$2 -S$5 -P$3 << xxx use $4 go print"**Changes to the table... (0 Replies)
Discussion started by: magikminox
0 Replies

2. UNIX for Dummies Questions & Answers

Create a script

How to I put my find command string into a script. It is currently to long to be entered manually at command line. for FNAME in `find /unixsxxx/interface/x.x/xxxxxx -type f \( -name '*.KSH' -o -name '*.sh' -o -name '*.sql' -o -name '*.ksh' \) -exec grep -il xxx.xxx.xxx.xxx {} \;`; do C=`grep -c... (1 Reply)
Discussion started by: TimHortons
1 Replies

3. Shell Programming and Scripting

Need help to create a script...

Hi, Am very new to scripting and yet to start learning... I need a help to create a script which should run in my unix boxes to acheive the following... 1. Need to copy the hosts file and save it as hostDDMMYYY 2. Should comment a line which matches the string cmpd 3. Should add a new... (5 Replies)
Discussion started by: sarav
5 Replies

4. Shell Programming and Scripting

create a basic script

Hi everybody :( :confused: :D, I need someone to help me! I have a file with 4 colunms and I would like to transform only the 4th colunm by multiplying this by a constant value (i.e 0.3047). I'm a new one using/creating basic scripts and I'm using linux redhat. The file has the following... (1 Reply)
Discussion started by: Estanislau
1 Replies

5. Shell Programming and Scripting

Script that also create a script, how can i save it?

say i have a script that says cat > resultofsample.sh #!/bin/bash codes but how can i exit it from here and save it? (8 Replies)
Discussion started by: garfish
8 Replies

6. Homework & Coursework Questions

Create script to add user and create directory

first off let me introduce myself. My name is Eric and I am new to linux, I am taking an advanced linux administration class and we are tasked with creating a script to add new users that anyone can run, has to check for the existence of a directory. if the directory does not exist then it has... (12 Replies)
Discussion started by: pbhound
12 Replies

7. Shell Programming and Scripting

Help Create dynamic ksh script from a script

I am currently running 2 scripts to gather data for a 3rd script and would like to combine the 2 scripts into one. Having issues with the final output format. Note cannot post URL so replaced the http stuff with (name) in the examples All scripts contain #!/bin/ksh OS = Red Hat Enterprise... (0 Replies)
Discussion started by: pcpinkerton
0 Replies

8. Shell Programming and Scripting

Bash: How can a script create a script?

I need to write a bash script that will generate another bash script. Furthermore, the child script is required to be hard-coded into the parent script. The parent script is not allowed to import the child script from an external file at run time. If you have a better solution than the... (3 Replies)
Discussion started by: LessNux
3 Replies

9. Programming

CGI Perl script to execute bash script- unable to create folder

Hi I have a bash script which takes parameters sh /tmp/gdg.sh -b BASE-NAME -n 1 -s /source/data -p /dest/data/archive -m ARC gdg.sh will scan the /source/data and will move the contents to /dest/data/archive after passing through some filters. Its working superb from bash I have... (0 Replies)
Discussion started by: rakeshkumar
0 Replies

10. Shell Programming and Scripting

Shell script to create runtime variables based on the number of parameters passed in the script

Hi All, I have a script which intends to create as many variables at runtime, as the number of parameters passed to it. The script needs to save these parameter values in the variables created and print them abc.sh ---------- export Numbr_Parms=$# export a=1 while do export... (3 Replies)
Discussion started by: dev.devil.1983
3 Replies
PIDFILE(3)                                                 BSD Library Functions Manual                                                 PIDFILE(3)

NAME
pidfile_open, pidfile_write, pidfile_close, pidfile_remove -- library for PID files handling LIBRARY
Utility functions from BSD systems (libbsd, -lbsd) SYNOPSIS
#include <bsd/libutil.h> struct pidfh * pidfile_open(const char *path, mode_t mode, pid_t *pidptr); int pidfile_write(struct pidfh *pfh); int pidfile_close(struct pidfh *pfh); int pidfile_remove(struct pidfh *pfh); DESCRIPTION
The pidfile family of functions allows daemons to handle PID files. It uses flopen(3) to lock a pidfile and detect already running daemons. The pidfile_open() function opens (or creates) a file specified by the path argument and locks it. If a file can not be locked, a PID of an already running daemon is returned in the pidptr argument (if it is not NULL). The function does not write process' PID into the file here, so it can be used before fork()ing and exit with a proper error message when needed. If the path argument is NULL, /var/run/<progname>.pid file will be used. The pidfile_write() function writes process' PID into a previously opened file. The pidfile_close() function closes a pidfile. It should be used after daemon fork()s to start a child process. The pidfile_remove() function closes and removes a pidfile. RETURN VALUES
The pidfile_open() function returns a valid pointer to a pidfh structure on success, or NULL if an error occurs. If an error occurs, errno will be set. The pidfile_write(), pidfile_close(), and pidfile_remove() functions return the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error. EXAMPLES
The following example shows in which order these functions should be used. Note that it is safe to pass NULL to pidfile_write(), pidfile_remove() and pidfile_close() functions. struct pidfh *pfh; pid_t otherpid, childpid; pfh = pidfile_open("/var/run/daemon.pid", 0600, &otherpid); if (pfh == NULL) { if (errno == EEXIST) { errx(EXIT_FAILURE, "Daemon already running, pid: %jd.", (intmax_t)otherpid); } /* If we cannot create pidfile from other reasons, only warn. */ warn("Cannot open or create pidfile"); } if (daemon(0, 0) == -1) { warn("Cannot daemonize"); pidfile_remove(pfh); exit(EXIT_FAILURE); } pidfile_write(pfh); for (;;) { /* Do work. */ childpid = fork(); switch (childpid) { case -1: syslog(LOG_ERR, "Cannot fork(): %s.", strerror(errno)); break; case 0: pidfile_close(pfh); /* Do child work. */ break; default: syslog(LOG_INFO, "Child %jd started.", (intmax_t)childpid); break; } } pidfile_remove(pfh); exit(EXIT_SUCCESS); ERRORS
The pidfile_open() function will fail if: [EEXIST] Some process already holds the lock on the given pidfile, meaning that a daemon is already running. [ENAMETOOLONG] Specified pidfile's name is too long. [EINVAL] Some process already holds the lock on the given pidfile, but PID read from there is invalid. [EAGAIN] Some process already holds the lock on the given pidfile, but the file is truncated. Most likely, the existing daemon is writing new PID into the file. The pidfile_open() function may also fail and set errno for any errors specified for the fstat(2), open(2), and read(2) calls. The pidfile_write() function will fail if: [EINVAL] Improper function use. Probably called before pidfile_open(). The pidfile_write() function may also fail and set errno for any errors specified for the fstat(2), ftruncate(2), and write(2) calls. The pidfile_close() function may fail and set errno for any errors specified for the close(2) and fstat(2) calls. The pidfile_remove() function will fail if: [EINVAL] Improper function use. Probably called not from the process which made pidfile_write(). The pidfile_remove() function may also fail and set errno for any errors specified for the close(2), fstat(2), write(2), and unlink(2) system calls and the flopen(3) library function. SEE ALSO
open(2), daemon(3), flopen(3) AUTHORS
The pidfile functionality is based on ideas from John-Mark Gurney <jmg@FreeBSD.org>. The code and manual page was written by Pawel Jakub Dawidek <pjd@FreeBSD.org>. BSD October 20, 2008 BSD
All times are GMT -4. The time now is 09:18 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy