<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://support.qbpro.ru/index.php?action=history&amp;feed=atom&amp;title=Node.js_debian_init.script</id>
	<title>Node.js debian init.script - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://support.qbpro.ru/index.php?action=history&amp;feed=atom&amp;title=Node.js_debian_init.script"/>
	<link rel="alternate" type="text/html" href="https://support.qbpro.ru/index.php?title=Node.js_debian_init.script&amp;action=history"/>
	<updated>2026-04-03T20:13:47Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.38.1</generator>
	<entry>
		<id>https://support.qbpro.ru/index.php?title=Node.js_debian_init.script&amp;diff=785&amp;oldid=prev</id>
		<title>imported&gt;Vix: Новая страница: « #!/bin/sh  # ------------------------------------------------------------------------------   # SOME INFOS : fairly standard (debian) init script.  #            …»</title>
		<link rel="alternate" type="text/html" href="https://support.qbpro.ru/index.php?title=Node.js_debian_init.script&amp;diff=785&amp;oldid=prev"/>
		<updated>2013-09-01T00:48:37Z</updated>

		<summary type="html">&lt;p&gt;Новая страница: « #!/bin/sh  # ------------------------------------------------------------------------------   # SOME INFOS : fairly standard (debian) init script.  #            …»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt; #!/bin/sh&lt;br /&gt;
 # ------------------------------------------------------------------------------ &lt;br /&gt;
 # SOME INFOS : fairly standard (debian) init script.&lt;br /&gt;
 #                 Note that node doesn't create a PID file (hence --make-pidfile) &lt;br /&gt;
 #                 has to be run in the background (hence --background)&lt;br /&gt;
 #                 and NOT as root (hence --chuid)&lt;br /&gt;
 #&lt;br /&gt;
 # MORE INFOS :  INIT SCRIPT       http://www.debian.org/doc/debian-policy/ch-opersys.html#s-sysvinit&lt;br /&gt;
 #               INIT-INFO RULES   http://wiki.debian.org/LSBInitScripts&lt;br /&gt;
 #               INSTALL/REMOVE    http://www.debian-administration.org/articles/28&lt;br /&gt;
 # ------------------------------------------------------------------------------&lt;br /&gt;
 #                                                                              #&lt;br /&gt;
 #                     BEGIN &amp;lt;MODIFY TO REFLECT YOUR SETTINGS&amp;gt;                  #&lt;br /&gt;
 #                                                                              #&lt;br /&gt;
 #&lt;br /&gt;
 #  1) Don't forget to also modify the COMMENTED fields in the &amp;quot;### BEGIN INIT INFO&amp;quot;&lt;br /&gt;
 #     below (don't uncomment them) if you wish to install system-wide with update-rc.d&lt;br /&gt;
 #     eg: provides, Short-Description, Description&lt;br /&gt;
 #&lt;br /&gt;
 #  2) in case you have different node.js servers running, each init.d script should&lt;br /&gt;
 #     (obviously) have a UNIQUE BASE name so that PIDS do not conflict&lt;br /&gt;
 #     --&amp;gt; name them accordingly&lt;br /&gt;
 #     eg: node_static_server, node_express1, node_load_balancer.sh...&lt;br /&gt;
 #&lt;br /&gt;
 #  3) copy the renamed/modified script(s) to /etc/init.d&lt;br /&gt;
 #     chmod 755,&lt;br /&gt;
 #&lt;br /&gt;
 #  4) if you wish the Daemon to be lauched at boot / stopped at shutdown :&lt;br /&gt;
 #     INSTALL : update-rc.d scriptname defaults &lt;br /&gt;
 #     (UNINSTALL : update-rc.d -f  scriptname remove)&lt;br /&gt;
 #&lt;br /&gt;
 #  5)  based on : Debian /etc/init.d/skeleton&lt;br /&gt;
 #      modified by : Peter Host (www.oghme.com)&lt;br /&gt;
 # ______________________________________________________________________________ &lt;br /&gt;
 ### BEGIN INIT INFO&lt;br /&gt;
 # Provides:          node_debian_init&lt;br /&gt;
 # Required-Start:    $remote_fs $named $syslog&lt;br /&gt;
 # Required-Stop:     $remote_fs $named $syslog&lt;br /&gt;
 # Default-Start:     2 3 4 5&lt;br /&gt;
 # Default-Stop:      0 1 6&lt;br /&gt;
 # Short-Description: DEBIAN initscript for node.js servers/apps&lt;br /&gt;
 # Description:       ex : proxy server is a node.js http server listening on&lt;br /&gt;
 #                    port 8080 (relayed from 80 by iptables). It balances&lt;br /&gt;
 #                    http requests between the main nodejs server &lt;br /&gt;
 #                    (nodejs.mydomain.com:8000), the static file-server &lt;br /&gt;
 #                    (static.mydomain.com) and the legacy apache server&lt;br /&gt;
 #                    (apache.mydomain.com) and possibly other servers&lt;br /&gt;
 #                    place this file in /etc/init.d.&lt;br /&gt;
 ### END INIT INFO&lt;br /&gt;
 &lt;br /&gt;
 # Author: My Name &amp;lt;myname@domain.tld&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;
 #&lt;br /&gt;
 # PATH should only include /usr/* if it runs after the mountnfs.sh script&lt;br /&gt;
 PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin # modify if you need&lt;br /&gt;
 &lt;br /&gt;
 DAEMON_ARGS=&amp;quot;/path/to/app.js&amp;quot;               # path to your node.js server/app&lt;br /&gt;
                                            # NB: don't use ~/ in path&lt;br /&gt;
 &lt;br /&gt;
 DESC=&amp;quot;node.js http server&amp;quot;                  # whatever fancy description you like&lt;br /&gt;
 &lt;br /&gt;
 NODEUSER=myuser:mygroup                     # USER who OWNS the daemon process (no matter whoever runs the init script)&lt;br /&gt;
                                            # user:group (if no group is specified, the primary GID for that user is used)&lt;br /&gt;
 &lt;br /&gt;
 LOCAL_VAR_RUN=/usr/local/var/run            # in case the init script is run by non-root user, you need to&lt;br /&gt;
                                            # indicate a directory writeable by $NODEUSER to store the PID file&lt;br /&gt;
                                            # NB : 1) /usr/local/var/run does not exist by DEFAULT. Either create it&lt;br /&gt;
                                            #      or choose one of your own liking.&lt;br /&gt;
                                            #      2) node, npm,... are best NOT installed/run as ROOT.&lt;br /&gt;
                                            #         (see here: https://github.com/isaacs/npm/blob/master/README.md)&lt;br /&gt;
 &lt;br /&gt;
 NAME=node                                   # name of the node.js executable&lt;br /&gt;
 DAEMON=/usr/local/bin/$NAME                 # this SHOULD POINT TO where your node executable is&lt;br /&gt;
 #&lt;br /&gt;
 #                                                                              #&lt;br /&gt;
 #                   END &amp;lt;/MODIFY TO REFLECT YOUR SETTINGS&amp;gt;                     #&lt;br /&gt;
 #                (Nothing else to modify from this point on...)                #&lt;br /&gt;
 # ------------------------------------------------------------------------------ &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 # Do NOT &amp;quot;set -e&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 [ $UID -eq &amp;quot;0&amp;quot; ] &amp;amp;&amp;amp; LOCAL_VAR_RUN=/var/run # in case this script is run by root, override user setting&lt;br /&gt;
 THIS_ARG=$0&lt;br /&gt;
 INIT_SCRIPT_NAME=`basename $THIS_ARG`&lt;br /&gt;
 [ -h $THIS_ARG ] &amp;amp;&amp;amp; INIT_SCRIPT_NAME=`basename $(readlink $THIS_ARG)` # in case of symlink&lt;br /&gt;
 INIT_SCRIPT_NAME_NOEXT=${INIT_SCRIPT_NAME%.*}                            &lt;br /&gt;
 PIDFILE=&amp;quot;$LOCAL_VAR_RUN/$INIT_SCRIPT_NAME_NOEXT.pid&amp;quot;&lt;br /&gt;
 SCRIPTNAME=/etc/init.d/$INIT_SCRIPT_NAME&lt;br /&gt;
 &lt;br /&gt;
 # Exit if the package is not installed&lt;br /&gt;
 [ -x &amp;quot;$DAEMON&amp;quot; ] ||  { echo &amp;quot;can't find Node.js ($DAEMON)&amp;quot;  &amp;gt;&amp;amp;2; exit 0; }&lt;br /&gt;
 &lt;br /&gt;
 # Exit if the 'run' folder is not present&lt;br /&gt;
 [ -d &amp;quot;$LOCAL_VAR_RUN&amp;quot; ] || { echo &amp;quot;Directory $LOCAL_VAR_RUN does not exist. Modify the '$INIT_SCRIPT_NAME_NOEXT' init.d script ($THIS_ARG)  accordingly&amp;quot; &amp;gt;&amp;amp;2; exit 0; }&lt;br /&gt;
 &lt;br /&gt;
 # Read configuration variable file if it is present&lt;br /&gt;
 [ -r /etc/default/$INIT_SCRIPT_NAME ] &amp;amp;&amp;amp; . /etc/default/$INIT_SCRIPT_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;
 &lt;br /&gt;
 # Define LSB log_* functions.&lt;br /&gt;
 # Depend on lsb-base (&amp;gt;= 3.0-6) to ensure that this file is present.&lt;br /&gt;
 . /lib/lsb/init-functions&lt;br /&gt;
 &lt;br /&gt;
 # uncomment to override system setting&lt;br /&gt;
 # VERBOSE=yes&lt;br /&gt;
 &lt;br /&gt;
 #&lt;br /&gt;
 # Function that starts the daemon/service&lt;br /&gt;
 #&lt;br /&gt;
 do_start()&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;
 	start-stop-daemon --start --quiet --pidfile $PIDFILE --chuid $NODEUSER --background --exec $DAEMON --test &amp;gt; /dev/null \&lt;br /&gt;
 		|| { [ &amp;quot;$VERBOSE&amp;quot; != no ] &amp;amp;&amp;amp; log_daemon_msg  &amp;quot;  ---&amp;gt;  Daemon already running $DESC&amp;quot; &amp;quot;$INIT_SCRIPT_NAME_NOEXT&amp;quot;; return 1; }&lt;br /&gt;
 	start-stop-daemon --start --quiet --chuid $NODEUSER --make-pidfile --pidfile $PIDFILE --background --exec $DAEMON -- \&lt;br /&gt;
 		$DAEMON_ARGS \&lt;br /&gt;
 || { [ &amp;quot;$VERBOSE&amp;quot; != no ] &amp;amp;&amp;amp; log_daemon_msg  &amp;quot;  ---&amp;gt;  could not be start $DESC&amp;quot; &amp;quot;$INIT_SCRIPT_NAME_NOEXT&amp;quot;; 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;
 	[ &amp;quot;$VERBOSE&amp;quot; != no ] &amp;amp;&amp;amp; log_daemon_msg  &amp;quot;  ---&amp;gt;  started $DESC&amp;quot; &amp;quot;$INIT_SCRIPT_NAME_NOEXT&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 #&lt;br /&gt;
 # Function that stops the daemon/service&lt;br /&gt;
 #&lt;br /&gt;
 do_stop()&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;
 	start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE  --chuid $NODEUSER --name $DAEMON&lt;br /&gt;
 	RETVAL=&amp;quot;$?&amp;quot;&lt;br /&gt;
 	#[ &amp;quot;$VERBOSE&amp;quot; != no ] &amp;amp;&amp;amp; [ &amp;quot;$RETVAL&amp;quot; = 1 ] &amp;amp;&amp;amp; log_daemon_msg  &amp;quot;  ---&amp;gt;  SIGKILL failed =&amp;gt; hardkill $DESC&amp;quot; &amp;quot;$INIT_SCRIPT_NAME_NOEXT&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/3/KILL/5 --pidfile $PIDFILE  --chuid $NODEUSER --exec $DAEMON -- $DAEMON_ARGS&lt;br /&gt;
 	[ &amp;quot;$?&amp;quot; = 2 ] &amp;amp;&amp;amp; return 2&lt;br /&gt;
 	# Many daemons don't delete their pidfiles when they exit.&lt;br /&gt;
 	rm -f $PIDFILE&lt;br /&gt;
  [ &amp;quot;$VERBOSE&amp;quot; != no ] &amp;amp;&amp;amp; [ &amp;quot;$RETVAL&amp;quot; = 1 ] &amp;amp;&amp;amp; log_daemon_msg &amp;quot;  ---&amp;gt;  $DESC not running&amp;quot; &amp;quot;$INIT_SCRIPT_NAME_NOEXT&amp;quot;&lt;br /&gt;
  [ &amp;quot;$VERBOSE&amp;quot; != no -a &amp;quot;$RETVAL&amp;quot; = 0 ] &amp;amp;&amp;amp; log_daemon_msg &amp;quot;  ---&amp;gt;  $DESC stopped&amp;quot; &amp;quot;$INIT_SCRIPT_NAME_NOEXT&amp;quot;&lt;br /&gt;
 	return &amp;quot;$RETVAL&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 #&lt;br /&gt;
 # Function that sends a SIGHUP to the daemon/service&lt;br /&gt;
 #&lt;br /&gt;
 do_reload() {&lt;br /&gt;
 	#&lt;br /&gt;
 	# If the daemon can reload its configuration without&lt;br /&gt;
 	# restarting (for example, when it is sent a SIGHUP),&lt;br /&gt;
 	# then implement that here.&lt;br /&gt;
 	#&lt;br /&gt;
 	start-stop-daemon --stop --quiet --signal 1 --pidfile $PIDFILE  --chuid $NODEUSER --name $NAME&lt;br /&gt;
 	return 0&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 #&lt;br /&gt;
 # Function that returns the daemon &lt;br /&gt;
 #&lt;br /&gt;
 do_status() {&lt;br /&gt;
  #&lt;br /&gt;
  # http://refspecs.freestandards.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/iniscrptact.html&lt;br /&gt;
  # 0 program is running or service is OK&lt;br /&gt;
  # 1 program is dead and /var/run pid file exists&lt;br /&gt;
  # (2 program is dead and /var/lock lock file exists) (not used here)&lt;br /&gt;
  # 3 program is not running&lt;br /&gt;
  # 4 program or service status is unknown&lt;br /&gt;
  RUNNING=$(running)&lt;br /&gt;
  &lt;br /&gt;
  # $PIDFILE corresponds to a live $NAME process&lt;br /&gt;
  ispidactive=$(pidof $NAME | grep `cat $PIDFILE 2&amp;gt;&amp;amp;1` &amp;gt;/dev/null 2&amp;gt;&amp;amp;1)&lt;br /&gt;
  ISPIDACTIVE=$?&lt;br /&gt;
 &lt;br /&gt;
  if [ -n &amp;quot;$RUNNING&amp;quot; ]; then&lt;br /&gt;
    if [ $ISPIDACTIVE ]; then &lt;br /&gt;
      log_success_msg &amp;quot;$INIT_SCRIPT_NAME_NOEXT (launched by $USER) (--chuid $NODEUSER) is running&amp;quot;&lt;br /&gt;
      exit 0      &lt;br /&gt;
    fi&lt;br /&gt;
  else&lt;br /&gt;
    if [ -f $PIDFILE ]; then&lt;br /&gt;
      log_success_msg &amp;quot;$INIT_SCRIPT_NAME_NOEXT (launched by $USER) (--chuid $NODEUSER) is not running, phantom pidfile $PIDFILE&amp;quot;&lt;br /&gt;
      exit 1&lt;br /&gt;
    else&lt;br /&gt;
      log_success_msg &amp;quot;no instance launched by $USER, of $INIT_SCRIPT_NAME_NOEXT (--chuid $NODEUSER) found&amp;quot;&lt;br /&gt;
      exit 3&lt;br /&gt;
    fi&lt;br /&gt;
  fi&lt;br /&gt;
  &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 running() {&lt;br /&gt;
  RUNSTAT=$(start-stop-daemon --start --quiet --pidfile $PIDFILE --chuid $NODEUSER --background --exec $DAEMON --test &amp;gt; /dev/null)&lt;br /&gt;
  if [ &amp;quot;$?&amp;quot; = 1 ]; then&lt;br /&gt;
    echo y&lt;br /&gt;
  fi&lt;br /&gt;
  &lt;br /&gt;
 } &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
  start)&lt;br /&gt;
 	[ &amp;quot;$VERBOSE&amp;quot; != no ] &amp;amp;&amp;amp; log_daemon_msg &amp;quot;Starting $DESC&amp;quot; &amp;quot;$INIT_SCRIPT_NAME_NOEXT&amp;quot;&lt;br /&gt;
 	do_start&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;
  stop)&lt;br /&gt;
 	[ &amp;quot;$VERBOSE&amp;quot; != no ] &amp;amp;&amp;amp; log_daemon_msg &amp;quot;Stopping $DESC&amp;quot; &amp;quot;$INIT_SCRIPT_NAME_NOEXT&amp;quot;&lt;br /&gt;
 	do_stop&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;
  #reload|force-reload)&lt;br /&gt;
 	#&lt;br /&gt;
 	# If do_reload() is not implemented then leave this commented out&lt;br /&gt;
 	# and leave 'force-reload' as an alias for 'restart'.&lt;br /&gt;
 	#&lt;br /&gt;
 	#log_daemon_msg &amp;quot;Reloading $DESC&amp;quot; &amp;quot;$NAME&amp;quot;&lt;br /&gt;
 	#do_reload&lt;br /&gt;
 	#log_end_msg $?&lt;br /&gt;
 	#;;&lt;br /&gt;
  restart|force-reload)&lt;br /&gt;
 	#&lt;br /&gt;
 	# If the &amp;quot;reload&amp;quot; option is implemented then remove the&lt;br /&gt;
 	# 'force-reload' alias&lt;br /&gt;
 	#&lt;br /&gt;
 	log_daemon_msg &amp;quot;Restarting $DESC&amp;quot; &amp;quot;$INIT_SCRIPT_NAME_NOEXT&amp;quot;&lt;br /&gt;
 	do_stop&lt;br /&gt;
 	case &amp;quot;$?&amp;quot; in&lt;br /&gt;
 	  0|1)&lt;br /&gt;
 		do_start&lt;br /&gt;
 		case &amp;quot;$?&amp;quot; in&lt;br /&gt;
 			0) log_end_msg 0 ;;&lt;br /&gt;
 			1) log_end_msg 1 ;; # Old process is still running&lt;br /&gt;
 			*) log_end_msg 1 ;; # Failed to start&lt;br /&gt;
 		esac&lt;br /&gt;
 		;;&lt;br /&gt;
 	  *)&lt;br /&gt;
 	  	# Failed to stop&lt;br /&gt;
 		log_end_msg 1&lt;br /&gt;
 		;;&lt;br /&gt;
 	esac&lt;br /&gt;
 	;;&lt;br /&gt;
  status)&lt;br /&gt;
    do_status&lt;br /&gt;
  ;;&lt;br /&gt;
  *)&lt;br /&gt;
 	#echo &amp;quot;Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
 	echo &amp;quot;Usage: $SCRIPTNAME {start|stop|restart|force-reload}&amp;quot; &amp;gt;&amp;amp;2&lt;br /&gt;
 	exit 3&lt;br /&gt;
 	;;&lt;br /&gt;
 esac&lt;br /&gt;
 &lt;br /&gt;
 exit 0&lt;br /&gt;
&lt;br /&gt;
* [https://gist.github.com/peterhost/715255/raw/6e2bf21365ff888d388d6fdacb9d86cadbe85e2e/node_debian_init.sh взято тут]&lt;/div&gt;</summary>
		<author><name>imported&gt;Vix</name></author>
	</entry>
</feed>