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.
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.
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)
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)
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)
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)
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)
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)
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)
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)
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
LEARN ABOUT OSX
pidfile
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