shell implementation

1.source (or.)

When using the source script to run, the system does not create a sub-shell, but the shell script commands into the parent run

2.sh or bash

When using sh or bash shell script to run the program, the system creates a sub-shell to execute commands in the script

export role is to set the current shell environment variables, such variables can also be accessed in its sub-shell, of course, still can not access the shell of his father

Common variables can only be accessed in the current shell, they can not access in the parent shell or sub-shell

3. script running in the background

command description
monitor.sh & --shell terminal cut off the script stopped working
nohup command & - the implementation of the program does not hang up
setsid command & - Close the shell terminal, the command continues to run in the background
(monitor.sh &) - Close the shell terminal, the command continues to run in the background
disown -h %1 - have not restrict the user exits the user processes running

4. boot script execution

rc.local

rc.local is executed after completion of all initialization, so we can start the script written inside

init.d

Under init.d directory are executable programs, they actually serve the script, written in a certain format, Linux will run automatically at startup, service in similar Windows

eg:

1. Create a startup script in the directory /etc/rc.d/init.d/

#!/bin/bash
### BEGIN INIT INFO
#
# Provides:     location_server
# Required-Start:    $local_fs  $remote_fs
# Required-Stop:    $local_fs  $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:     0 1 6
# Short-Description:    initscript
# Description:     This file should be used to construct scripts to be placed in /etc/init.d.
#
### END INIT INFO

## Fill in name of program here.
PROG="location_server"   # 所要执行程序的名称
PROG_PATH="/opt/location_server" # 可执行文件所在目录
helpful (if $PROG resides in /opt for example).
PROG_ARGS=""  # 执行程序需要的各个参数
PID_PATH="/var/run/"

start() {
    if [ -e "$PID_PATH/$PROG.pid" ]; then
        ## Program is running, exit with error.
        echo "Error! $PROG is currently running!" 1>&2
        exit 1
    else
        ## Change from /dev/null to something like /var/log/$PROG if you want to save output.
        $PROG_PATH/$PROG $PROG_ARGS 2>&1 >/var/log/$PROG &
    $pid=`ps ax | grep -i 'location_server' | sed 's/^\([0-9]\{1,\}\).*/\1/g' | head -n 1`

        echo "$PROG started"
        echo $pid > "$PID_PATH/$PROG.pid"
    fi
}

stop() {
    echo "begin stop"
    if [ -e "$PID_PATH/$PROG.pid" ]; then
        ## Program is running, so stop it
    pid=`ps ax | grep -i 'location_server' | sed 's/^\([0-9]\{1,\}\).*/\1/g' | head -n 1`
    kill $pid

        rm -f  "$PID_PATH/$PROG.pid"
        echo "$PROG stopped"
    else
        ## Program is not running, exit with error.
        echo "Error! $PROG not started!" 1>&2
        exit 1
    fi
}

## Check to see if we are running as root first.
## Found at http://www.cyberciti.biz/tips/shell-root-user-check-script.html
if [ "$(id -u)" != "0" ]; then
    echo "This script must be run as root" 1>&2
    exit 1
fi

case "$1" in
    start)
        start
        exit 0
    ;;
    stop)
        stop
        exit 0
    ;;
    reload|restart|force-reload)
        stop
        start
        exit 0
    ;;
    **)
        echo "Usage: $0 {start|stop|reload}" 1>&2
        exit 1
    ;;
esac

2. Add Remove Service

添加: sudo update-rc.d 服务名 defaults

删除:sudo update-rc.d -f 服务名 remove

3. startup, shutdown, restart service

/etc/init.d/服务名 start

/etc/init.d/服务名 stop

/etc/init.d/服务名 start

Guess you like

Origin www.cnblogs.com/jfxu/p/11986643.html