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