<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.antiperfect.org/index.php?action=history&amp;feed=atom&amp;title=Linux%2FUnix%3AStartup</id>
	<title>Linux/Unix:Startup - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.antiperfect.org/index.php?action=history&amp;feed=atom&amp;title=Linux%2FUnix%3AStartup"/>
	<link rel="alternate" type="text/html" href="https://wiki.antiperfect.org/index.php?title=Linux/Unix:Startup&amp;action=history"/>
	<updated>2026-10-18T01:15:03Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://wiki.antiperfect.org/index.php?title=Linux/Unix:Startup&amp;diff=944&amp;oldid=prev</id>
		<title>Hdridder: Created page with &quot;Category:Linux/Unix  Startup scripts are in &lt;code&gt;/etc/init.d&lt;/code&gt;  If  /lib/init/init-d-script is on your system startup scripts can be as easy as this. Customizations...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.antiperfect.org/index.php?title=Linux/Unix:Startup&amp;diff=944&amp;oldid=prev"/>
		<updated>2020-09-25T12:48:28Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;&lt;a href=&quot;/index.php?title=Category:Linux/Unix&quot; title=&quot;Category:Linux/Unix&quot;&gt;Category:Linux/Unix&lt;/a&gt;  Startup scripts are in &amp;lt;code&amp;gt;/etc/init.d&amp;lt;/code&amp;gt;  If  /lib/init/init-d-script is on your system startup scripts can be as easy as this. Customizations...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Category:Linux/Unix]]&lt;br /&gt;
&lt;br /&gt;
Startup scripts are in &amp;lt;code&amp;gt;/etc/init.d&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If  /lib/init/init-d-script is on your system startup scripts can be as easy as this.&lt;br /&gt;
Customizations can be done by copying functions form the init-d-script to your startup script.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# kFreeBSD do not accept scripts as interpreters, using #!/bin/sh and sourcing.&lt;br /&gt;
if [ true != &amp;quot;$INIT_D_SCRIPT_SOURCED&amp;quot; ] ; then&lt;br /&gt;
    set &amp;quot;$0&amp;quot; &amp;quot;$@&amp;quot;; INIT_D_SCRIPT_SOURCED=true . /lib/init/init-d-script&lt;br /&gt;
fi&lt;br /&gt;
### BEGIN INIT INFO&lt;br /&gt;
# Provides:          skeleton&lt;br /&gt;
# Required-Start:    $remote_fs $syslog&lt;br /&gt;
# Required-Stop:     $remote_fs $syslog&lt;br /&gt;
# Default-Start:     2 3 4 5&lt;br /&gt;
# Default-Stop:      0 1 6&lt;br /&gt;
# Short-Description: Example initscript&lt;br /&gt;
# Description:       This file should be used to construct scripts to be&lt;br /&gt;
#                    placed in /etc/init.d.  This example start a&lt;br /&gt;
#                    single forking daemon capable of writing a pid&lt;br /&gt;
#                    file.  To get other behavoirs, implemend&lt;br /&gt;
#                    do_start(), do_stop() or other functions to&lt;br /&gt;
#                    override the defaults in /lib/init/init-d-script.&lt;br /&gt;
### END INIT INFO&lt;br /&gt;
&lt;br /&gt;
# Author: Foo Bar &amp;lt;foobar@baz.org&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# Please remove the &amp;quot;Author&amp;quot; lines above and replace them&lt;br /&gt;
# with your own name if you copy and modify this script.&lt;br /&gt;
&lt;br /&gt;
DESC=&amp;quot;Description of the service&amp;quot;&lt;br /&gt;
DAEMON=/usr/sbin/daemonexecutablename&lt;br /&gt;
DAEMON_ARGS=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=/lib/init/init-d-script=&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=bash&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# See init-d-script(5) for instructions on how to use this library.&lt;br /&gt;
#=============================================================================&lt;br /&gt;
# Define LSB log_* functions.&lt;br /&gt;
# Depend on lsb-base (&amp;gt;= 3.2-14) to ensure that this file is present&lt;br /&gt;
# and status_of_proc is working.&lt;br /&gt;
. /lib/lsb/init-functions&lt;br /&gt;
&lt;br /&gt;
# PATH should only include /usr/* if it runs after the mountnfs.sh&lt;br /&gt;
# script.  Scripts running before mountnfs.sh should remove the /usr/*&lt;br /&gt;
# entries.&lt;br /&gt;
PATH=/sbin:/usr/sbin:/bin:/usr/bin&lt;br /&gt;
export PATH&lt;br /&gt;
&lt;br /&gt;
is_call_implemented() {&lt;br /&gt;
	command -V $1 &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
do_usage() {&lt;br /&gt;
	if is_call_implemented do_reload ; then&lt;br /&gt;
		echo &amp;quot;Usage: $SCRIPTNAME {start|stop|status|reload|restart|try-restart|force-reload}&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
	else&lt;br /&gt;
		echo &amp;quot;Usage: $SCRIPTNAME {start|stop|status|restart|try-restart|force-reload}&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
	fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
call() {&lt;br /&gt;
	cmd=&amp;quot;$1&amp;quot;&lt;br /&gt;
	shift&lt;br /&gt;
	if is_call_implemented ${cmd}_override ; then&lt;br /&gt;
	    ${cmd}_override &amp;quot;$@&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
            ${cmd} &amp;quot;$@&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Function that starts the daemon/service&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# Return&lt;br /&gt;
#   0 if daemon has been started&lt;br /&gt;
#   1 if daemon was already running&lt;br /&gt;
#   2 if daemon could not be started&lt;br /&gt;
do_start_cmd() {&lt;br /&gt;
	start-stop-daemon --start --quiet ${PIDFILE:+--pidfile ${PIDFILE}} \&lt;br /&gt;
	    $START_ARGS \&lt;br /&gt;
	    --startas $DAEMON --name $NAME --exec $DAEMON --test &amp;gt; /dev/null \&lt;br /&gt;
	    || return 1&lt;br /&gt;
	start-stop-daemon --start --quiet ${PIDFILE:+--pidfile ${PIDFILE}} \&lt;br /&gt;
	    $START_ARGS \&lt;br /&gt;
	    --startas $DAEMON --name $NAME --exec $DAEMON -- $DAEMON_ARGS \&lt;br /&gt;
	    || return 2&lt;br /&gt;
	# Add code here, if necessary, that waits for the process to be ready&lt;br /&gt;
	# to handle requests from services started subsequently which depend&lt;br /&gt;
	# on this one.  As a last resort, sleep for some time.&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
do_start()&lt;br /&gt;
{&lt;br /&gt;
	if is_call_implemented do_start_prepare ; then&lt;br /&gt;
		call do_start_prepare&lt;br /&gt;
	fi&lt;br /&gt;
	[ &amp;quot;$VERBOSE&amp;quot; != no ] &amp;amp;&amp;amp; log_daemon_msg &amp;quot;Starting $DESC&amp;quot; &amp;quot;$NAME&amp;quot;&lt;br /&gt;
	call do_start_cmd&lt;br /&gt;
	case &amp;quot;$?&amp;quot; in&lt;br /&gt;
		0|1) [ &amp;quot;$VERBOSE&amp;quot; != no ] &amp;amp;&amp;amp; log_end_msg 0 ;;&lt;br /&gt;
		2) [ &amp;quot;$VERBOSE&amp;quot; != no ] &amp;amp;&amp;amp; log_end_msg 1 ;;&lt;br /&gt;
	esac&lt;br /&gt;
	if is_call_implemented do_start_cleanup ; then&lt;br /&gt;
		call do_start_cleanup&lt;br /&gt;
	fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# Function that stops the daemon/service&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# Return&lt;br /&gt;
#   0 if daemon has been stopped&lt;br /&gt;
#   1 if daemon was already stopped&lt;br /&gt;
#   2 if daemon could not be stopped&lt;br /&gt;
#   other if a failure occurred&lt;br /&gt;
do_stop_cmd() {&lt;br /&gt;
	start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 \&lt;br /&gt;
	    $STOP_ARGS \&lt;br /&gt;
	    ${PIDFILE:+--pidfile ${PIDFILE}} --name $NAME --exec $DAEMON&lt;br /&gt;
	RETVAL=&amp;quot;$?&amp;quot;&lt;br /&gt;
	[ &amp;quot;$RETVAL&amp;quot; = 2 ] &amp;amp;&amp;amp; return 2&lt;br /&gt;
	# Wait for children to finish too if this is a daemon that forks&lt;br /&gt;
	# and if the daemon is only ever run from this initscript.&lt;br /&gt;
	# If the above conditions are not satisfied then add some other code&lt;br /&gt;
	# that waits for the process to drop all resources that could be&lt;br /&gt;
	# needed by services started subsequently.  A last resort is to&lt;br /&gt;
	# sleep for some time.&lt;br /&gt;
	start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 \&lt;br /&gt;
	    $STOP_ARGS \&lt;br /&gt;
	    --exec $DAEMON&lt;br /&gt;
	[ &amp;quot;$?&amp;quot; = 2 ] &amp;amp;&amp;amp; return 2&lt;br /&gt;
	# Many daemons don&amp;#039;t delete their pidfiles when they exit.&lt;br /&gt;
	rm -f $PIDFILE&lt;br /&gt;
	return $RETVAL&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
do_stop()&lt;br /&gt;
{&lt;br /&gt;
	if is_call_implemented do_stop_prepare ; then&lt;br /&gt;
		call do_stop_prepare&lt;br /&gt;
	fi&lt;br /&gt;
	[ &amp;quot;$VERBOSE&amp;quot; != no ] &amp;amp;&amp;amp; log_daemon_msg &amp;quot;Stopping $DESC&amp;quot; &amp;quot;$NAME&amp;quot;&lt;br /&gt;
	call do_stop_cmd&lt;br /&gt;
	case &amp;quot;$?&amp;quot; in&lt;br /&gt;
		0|1) [ &amp;quot;$VERBOSE&amp;quot; != no ] &amp;amp;&amp;amp; log_end_msg 0 ;;&lt;br /&gt;
		2) [ &amp;quot;$VERBOSE&amp;quot; != no ] &amp;amp;&amp;amp; log_end_msg 1 ;;&lt;br /&gt;
	esac&lt;br /&gt;
	if is_call_implemented do_stop_cleanup ; then&lt;br /&gt;
		call do_stop_cleanup&lt;br /&gt;
	fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
do_restart() {&lt;br /&gt;
	[ &amp;quot;$VERBOSE&amp;quot; != no ] &amp;amp;&amp;amp; log_daemon_msg &amp;quot;Restarting $DESC&amp;quot; &amp;quot;$NAME&amp;quot;&lt;br /&gt;
	call do_stop_cmd&lt;br /&gt;
	call do_start_cmd&lt;br /&gt;
	case &amp;quot;$?&amp;quot; in&lt;br /&gt;
		0|1) [ &amp;quot;$VERBOSE&amp;quot; != no ] &amp;amp;&amp;amp; log_end_msg 0 ;;&lt;br /&gt;
		2) [ &amp;quot;$VERBOSE&amp;quot; != no ] &amp;amp;&amp;amp; log_end_msg 1 ;;&lt;br /&gt;
	esac&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
do_force_reload() {&lt;br /&gt;
	if is_call_implemented do_reload ; then&lt;br /&gt;
		call do_reload&lt;br /&gt;
	else&lt;br /&gt;
		call do_restart&lt;br /&gt;
	fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Enable this using&lt;br /&gt;
# alias do_reload=do_reload_sigusr1&lt;br /&gt;
do_reload_sigusr1() {&lt;br /&gt;
        log_daemon_msg &amp;quot;Reloading $DESC configuration files&amp;quot; &amp;quot;$NAME&amp;quot;&lt;br /&gt;
        start-stop-daemon --oknodo --stop --signal 1 --quiet \&lt;br /&gt;
          --pidfile &amp;quot;$PIDFILE&amp;quot; --exec &amp;quot;$DAEMON&amp;quot;&lt;br /&gt;
        log_end_msg $?&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
do_status() {&lt;br /&gt;
	status_of_proc &amp;quot;$DAEMON&amp;quot; &amp;quot;$NAME&amp;quot; &amp;amp;&amp;amp; return 0 || return $?&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [ &amp;quot;$DEBUG&amp;quot; = &amp;quot;true&amp;quot; ] ; then&lt;br /&gt;
    set -x&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
SCRIPTNAME=$1&lt;br /&gt;
scriptbasename=&amp;quot;$(basename $1)&amp;quot;&lt;br /&gt;
if [ &amp;quot;$scriptbasename&amp;quot; != &amp;quot;init-d-script&amp;quot; ] ; then&lt;br /&gt;
    script=&amp;quot;$1&amp;quot;&lt;br /&gt;
    shift&lt;br /&gt;
    . $script&lt;br /&gt;
else&lt;br /&gt;
    exit 0&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
NAME=${NAME:=$(basename $DAEMON)}&lt;br /&gt;
DESC=${DESC:=$NAME}&lt;br /&gt;
&lt;br /&gt;
# Do not use pid file if $PIDFILE is &amp;#039;none&amp;#039;.  Otherwise, generate from&lt;br /&gt;
# $NAME or use the value provided by the init.d script.&lt;br /&gt;
if [ none = &amp;quot;$PIDFILE&amp;quot; ] ; then&lt;br /&gt;
    PIDFILE=&lt;br /&gt;
elif [ -z &amp;quot;$PIDFILE&amp;quot; ] ; then&lt;br /&gt;
    PIDFILE=/var/run/$NAME.pid&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Exit if the package is not installed&lt;br /&gt;
if [ none != &amp;quot;$DAEMON&amp;quot; ] &amp;amp;&amp;amp; [ ! -x &amp;quot;$DAEMON&amp;quot; ] ; then&lt;br /&gt;
	exit 0&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# Read configuration variable file if it is present&lt;br /&gt;
[ -r /etc/default/$NAME ] &amp;amp;&amp;amp; . /etc/default/$NAME&lt;br /&gt;
&lt;br /&gt;
# Load the VERBOSE setting and other rcS variables&lt;br /&gt;
. /lib/init/vars.sh&lt;br /&gt;
if [ -t 0 ] ; then # Be verbose when called from a terminal&lt;br /&gt;
    VERBOSE=yes&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
	call do_start&lt;br /&gt;
	;;&lt;br /&gt;
  stop)&lt;br /&gt;
	call do_stop&lt;br /&gt;
	;;&lt;br /&gt;
  status)&lt;br /&gt;
	call do_status&lt;br /&gt;
	;;&lt;br /&gt;
  reload)&lt;br /&gt;
	if is_call_implemented do_reload ; then&lt;br /&gt;
		do_reload&lt;br /&gt;
	else&lt;br /&gt;
		call do_usage&lt;br /&gt;
		exit 3&lt;br /&gt;
	fi&lt;br /&gt;
	;;&lt;br /&gt;
  force-reload)&lt;br /&gt;
	call do_force_reload&lt;br /&gt;
	;;&lt;br /&gt;
  restart)&lt;br /&gt;
	call do_restart&lt;br /&gt;
	;;&lt;br /&gt;
  try-restart)&lt;br /&gt;
        log_daemon_msg &amp;quot;Trying to restart $DESC&amp;quot; &amp;quot;$NAME&amp;quot;&lt;br /&gt;
	if call do_status &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 ; then&lt;br /&gt;
	    call do_restart&lt;br /&gt;
            log_end_msg $?&lt;br /&gt;
	else&lt;br /&gt;
	    log_progress_msg &amp;quot;is not running.&amp;quot;&lt;br /&gt;
            log_end_msg 1&lt;br /&gt;
    	fi&lt;br /&gt;
	;;&lt;br /&gt;
  &amp;#039;&amp;#039;)&lt;br /&gt;
	call do_usage&lt;br /&gt;
	exit 3&lt;br /&gt;
	;;&lt;br /&gt;
  *)&lt;br /&gt;
	if is_call_implemented do_unknown ; then&lt;br /&gt;
	    call do_unknown &amp;quot;$1&amp;quot;&lt;br /&gt;
	    exit 3&lt;br /&gt;
	else&lt;br /&gt;
	    call do_usage&lt;br /&gt;
	    exit 3&lt;br /&gt;
	fi&lt;br /&gt;
	;;&lt;br /&gt;
esac&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Hdridder</name></author>
	</entry>
</feed>