1. 程式人生 > >[樂意黎]linux的nohup命令的用法

[樂意黎]linux的nohup命令的用法

在應用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

123[root@test bin]# ./mysqld --user=mysql &[root@test bin]# ps -ef|grep mysql |grep -v grepmysql    11165 11100  2 01:06 pts/1    00:00:00 ./mysqld --user=mysql

mysqld有很多引數選項,可以使用以下命令檢視所有的選項列表:

1shell> 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]。

1234567891011121314151617[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 greproot     11482 11100  0 01:15 pts/1    00:00:00 /bin/sh ./mysqld_safe --user=mysqlmysql    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>&1151217 01:16:17 mysqld_safe Number of processes running now: 0151217 01:16:17 mysqld_safe mysqld restarted[root@est bin]# ps -ef|grep mysql|grep -v greproot     11482 11100  0 01:15 pts/1    00:00:00 /bin/sh ./mysqld_safe --user=mysqlmysql    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

12345[root@test bin]# ./mysql.server startStarting MySQL[  OK  ][root@test bin]# ps -ef|grep mysql|grep -v greproot     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.pidmysql    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