Force the specification of a pidfile or process name if daemon is a script. Alternatively, document the use of starting the script interpreter and passing the daemon as an option.
This commit is contained in:
parent
8b4b958678
commit
d1f7f0a304
@ -22,7 +22,7 @@
|
|||||||
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
.\" SUCH DAMAGE.
|
.\" SUCH DAMAGE.
|
||||||
.\"
|
.\"
|
||||||
.Dd Feb 22, 2008
|
.Dd Feb 24, 2008
|
||||||
.Dt START-STOP-DAEMON 8 SMM
|
.Dt START-STOP-DAEMON 8 SMM
|
||||||
.Os OpenRC
|
.Os OpenRC
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -64,19 +64,36 @@ daemon is still running. If not, then the service is marked as crashed.
|
|||||||
Here are the options to specify the daemon and how it should start or stop:
|
Here are the options to specify the daemon and how it should start or stop:
|
||||||
.Bl -tag -width indent
|
.Bl -tag -width indent
|
||||||
.It Fl x , -exec Ar daemon
|
.It Fl x , -exec Ar daemon
|
||||||
The daemon we start or stop.
|
The
|
||||||
|
.Ar daemon
|
||||||
|
we start or stop.
|
||||||
|
If the
|
||||||
|
.Ar daemon
|
||||||
|
is a script and you are not using the pidfile or process name options,
|
||||||
|
then you should replace
|
||||||
|
.Ar daemon
|
||||||
|
with the interpreter and pass
|
||||||
|
.Ar daemon
|
||||||
|
as an argument. Below is an example:
|
||||||
|
.Pp
|
||||||
|
start-stop-daemon -Sx /usr/bin/perl -- /usr/bin/daemon.pl
|
||||||
.It Fl p , -pidfile Ar pidfile
|
.It Fl p , -pidfile Ar pidfile
|
||||||
When starting, we expect the daemon to create a valid pidfile within a
|
When starting, we expect the daemon to create a valid
|
||||||
reasonable amount of time. When stopping we only stop the pid(s) listed in
|
.Ar pidfile
|
||||||
the pidfile.
|
within a reasonable amount of time. When stopping we only stop the pid(s)
|
||||||
|
listed in the
|
||||||
|
.Ar pidfile .
|
||||||
.It Fl n , -name Ar name
|
.It Fl n , -name Ar name
|
||||||
For whatever reason, some daemons don't create pidfiles or change their
|
Match the process
|
||||||
process name. You can specify name here to be the process name to stop.
|
.Ar name
|
||||||
You may need to use this for interpreted daemons using languages such as
|
instead of a pidfile or executable.
|
||||||
perl, ruby, shell, etc.
|
|
||||||
.It Fl u , -user Ar user Ns Op : Ns Ar group
|
.It Fl u , -user Ar user Ns Op : Ns Ar group
|
||||||
Start the daemon as the user and update $HOME accordingly or stop daemons
|
Start the daemon as the
|
||||||
owned by the user. You can optionally append a groupname here also.
|
.Ar user
|
||||||
|
and update $HOME accordingly or stop daemons
|
||||||
|
owned by the user. You can optionally append a
|
||||||
|
.Ar group
|
||||||
|
name here also.
|
||||||
.It Fl t , -test
|
.It Fl t , -test
|
||||||
Print the action(s) that would be taken, but don't actually do anything.
|
Print the action(s) that would be taken, but don't actually do anything.
|
||||||
The return value is set as if the command was taken and worked.
|
The return value is set as if the command was taken and worked.
|
||||||
@ -128,9 +145,25 @@ stopping schedule.
|
|||||||
If not specified then a default value of SIGTERM/5 is
|
If not specified then a default value of SIGTERM/5 is
|
||||||
assumed.
|
assumed.
|
||||||
.El
|
.El
|
||||||
|
.Sh NOTE
|
||||||
|
.Nm
|
||||||
|
uses
|
||||||
|
.Xr getopt 3
|
||||||
|
to parse its options, which allows it to accept the `--' option which will
|
||||||
|
cause it to stop processing options at that point. Any subsequent arguments
|
||||||
|
are passed as arguments to the daemon to start and used when finding a daemon
|
||||||
|
to stop or signal.
|
||||||
.Sh SEE ALSO
|
.Sh SEE ALSO
|
||||||
.Xr chdir 2 ,
|
.Xr chdir 2 ,
|
||||||
.Xr chroot 2 ,
|
.Xr chroot 2 ,
|
||||||
.Xr nice 2
|
.Xr getopt 3 ,
|
||||||
|
.Xr nice 2 ,
|
||||||
|
.Xr rc_find_pids 3
|
||||||
|
.Sh HISTORY
|
||||||
|
.Nm
|
||||||
|
first appeared in Debian.
|
||||||
|
.Pp
|
||||||
|
This is a complete re-implementation with the process finding code in the
|
||||||
|
OpenRC library (librc, -lrc) so other programs can make use of it.
|
||||||
.Sh AUTHORS
|
.Sh AUTHORS
|
||||||
.An "Roy Marples" Aq roy@marples.name
|
.An "Roy Marples" Aq roy@marples.name
|
||||||
|
@ -758,18 +758,51 @@ int start_stop_daemon (int argc, char **argv)
|
|||||||
argv += optind;
|
argv += optind;
|
||||||
|
|
||||||
/* Validate that the binary exists if we are starting */
|
/* Validate that the binary exists if we are starting */
|
||||||
if (exec && start) {
|
if (exec) {
|
||||||
char *tmp;
|
char *tmp;
|
||||||
if (ch_root)
|
if (ch_root)
|
||||||
tmp = rc_strcatpaths (ch_root, exec, (char *) NULL);
|
tmp = rc_strcatpaths (ch_root, exec, (char *) NULL);
|
||||||
else
|
else
|
||||||
tmp = exec;
|
tmp = exec;
|
||||||
if (! exists (tmp)) {
|
if (start && ! exists (tmp)) {
|
||||||
eerror ("%s: %s does not exist", applet, tmp);
|
eerror ("%s: %s does not exist", applet, tmp);
|
||||||
if (ch_root)
|
if (ch_root)
|
||||||
free (tmp);
|
free (tmp);
|
||||||
exit (EXIT_FAILURE);
|
exit (EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If we don't have a pidfile or name, check it's not
|
||||||
|
* interpreted, otherwise we should fail */
|
||||||
|
if (! pidfile && ! cmd) {
|
||||||
|
char line[130];
|
||||||
|
FILE *fp = fopen (tmp, "r");
|
||||||
|
|
||||||
|
if (fp) {
|
||||||
|
fgets (line, sizeof (line), fp);
|
||||||
|
fclose (fp);
|
||||||
|
|
||||||
|
if (line[0] == '#' && line[1] == '!') {
|
||||||
|
size_t len = strlen (line) - 1;
|
||||||
|
|
||||||
|
/* Remove the trailing newline */
|
||||||
|
if (line[len] == '\n')
|
||||||
|
line[len] = '\0';
|
||||||
|
|
||||||
|
eerror ("%s: %s is a script",
|
||||||
|
applet, exec);
|
||||||
|
eerror ("%s: and should be started, stopped or signalled with ",
|
||||||
|
applet);
|
||||||
|
eerror ("%s: --exec %s %s",
|
||||||
|
applet, line + 2, exec);
|
||||||
|
eerror ("%s: or you should specify a pidfile or process name",
|
||||||
|
applet);
|
||||||
|
if (ch_root)
|
||||||
|
free (tmp);
|
||||||
|
exit (EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (ch_root)
|
if (ch_root)
|
||||||
free (tmp);
|
free (tmp);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user