在应用Unix/Linux时,我们一般想让某个程序在后台运行,于是我们将常会用 & 在程序结尾来让程序自动运行。比如我们要运行mysql在后台: /usr/local/mysql/bin/mysqld_safe –user=mysql &。可是有很多程序并不想mysqld一样,这样我们就需要nohup命令,怎样使用nohup命令呢?这里讲解nohup命令的一些用法。
nohup /root/start.sh &
在shell中回车后提示:
[~]$ appending output to nohup.out
原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用。
附:nohup命令参考
nohup 命令
用途:不挂断地运行命令。
语法:nohup Command [ Arg … ] [ & ]
描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示”and”的符号)到命令的尾部。
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。
退出状态:该命令返回下列出口值:
126 可以查找但不能调用 Command 参数指定的命令。
127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。
1.mysqld: mysql server
1
2
3
|
[root@
test
bin]
# ./mysqld --user=mysql &
[root@
test
bin]
# ps -ef|grep mysql |grep -v grep
mysql 11165 11100 2 01:06 pts
/1
00:00:00 .
/mysqld
--user=mysql
|
mysqld有很多参数选项,可以使用以下命令查看所有的选项列表:
1
|
shell> mysqld --verbose --help
|
2.mysqld_safe: mysqld启动脚本
建议使用mysqld_safe启动mysql,mysqld_safe加入了一些安全特性,比如发生错误时重启mysql server、将运行时日志记录到错误日志文件。
mysqld_safe会读取my.cnf中的[mysqld]、[server]、[mysqld_safe]部分的配置信息。此外,为了向后兼容,还会读取[safe_mysqld]部分的配置信息,不过现在的版本中都应该写成[mysqld_safe]。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
[root@
test
bin]
# ./mysqld_safe --user=mysql &
[1] 11482
[root@
test
bin]
# 151217 01:16:00 mysqld_safe Logging to '/var/mysql/data/dbtest.err'.
151217 01:16:00 mysqld_safe Starting mysqld daemon with databases from
/var/mysql/data
[root@
test
bin]
# ps -ef|grep mysql|grep -v grep
root 11482 11100 0 01:15 pts
/1
00:00:00
/bin/sh
.
/mysqld_safe
--user=mysql
mysql 11632 11482 3 01:15 pts
/1
00:00:00
/usr/local/mysql/bin/mysqld
--basedir=
/usr/local/mysql
--datadir=
/var/mysql/data
--plugin-
dir
=
/usr/local/mysql/lib/plugin
--user=mysql --log-error=
/var/mysql/data/dbtest
.err --pid-
file
=
/var/mysql/data/dbtest
.pid
# 使用mysqld_safe启动mysql server后,mysqld异常终端后,会自动重启
[root@
test
bin]
# kill -9 11632
[root@
test
bin]
# ./mysqld_safe: line 166: 11632 Killed nohup /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/var/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/mysql/data/dbtest.err --pid-file=/var/mysql/data/dbtest.pid < /dev/null >> /var/mysql/data/dbtest.err 2>&1
151217 01:16:17 mysqld_safe Number of processes running now: 0
151217 01:16:17 mysqld_safe mysqld restarted
[root@est bin]
# ps -ef|grep mysql|grep -v grep
root 11482 11100 0 01:15 pts
/1
00:00:00
/bin/sh
.
/mysqld_safe
--user=mysql
mysql 11673 11482 5 01:16 pts
/1
00:00:00
/usr/local/mysql/bin/mysqld
--basedir=
/usr/local/mysql
--datadir=
/var/mysql/data
--plugin-
dir
=
/usr/local/mysql/lib/plugin
--user=mysql --log-error=
/var/mysql/data/dbtest
.err --pid-
file
=
/var/mysql/data/dbtest
.pid
|
3.mysql.server: mysqld启动脚本
mysql.server也是通过调用mysqld_safe脚本来启动mysql server
1
2
3
4
5
|
[root@
test
bin]
# ./mysql.server start
Starting MySQL[ OK ]
[root@
test
bin]
# ps -ef|grep mysql|grep -v grep
root 11783 1 0 01:23 pts
/1
00:00:00
/bin/sh
/usr/local/mysql/bin/mysqld_safe
--datadir=
/var/mysql/data
--pid-
file
=
/var/mysql/data/dbtest
.pid
mysql 11948 11783 2 01:23 pts
/1
00:00:00
/usr/local/mysql/bin/mysqld
--basedir=
/usr/local/mysql
--datadir=
/var/mysql/data
--plugin-
dir
=
/usr/local/mysql/lib/plugin
--user=mysql --log-error=
/var/mysql/data/dbtest
.err --pid-
file
=
/var/mysql/data/dbtest
.pid
|
4.mysqld_multi: 管理多个mysql server