centosnginx啟動腳本
A. centos 7 啟動程序 帶參數d 是什麼意思
首先,系統貌似沒有加 d 的參數,除非程序是你自己開發的特定程序,加d為特定參數。
linux 添加開機啟動項的三種方法。
(1)編輯文件 /etc/rc.local
輸入命令:vim /etc/rc.local 將出現類似如下的文本片段:
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
/etc/init.d/mysqld start #mysql開機啟動
/etc/init.d/nginx start #nginx開機啟動
/etc/init.d/php-fpm start #php-fpm開機啟動
/etc/init.d/memcached start #memcache開機啟動
#在文件末尾(exit 0之前)加上你開機需要啟動的程序或執行的命令即可(執行的程序需要寫絕對路徑,添加到系統環境變數的除外),如:
/usr/local/thttpd/sbin/thttpd -C /usr/local/thttpd/etc/thttpd.conf
(2)自己寫一個shell腳本
將寫好的腳本(.sh文件)放到目錄 /etc/profile.d/ 下,系統啟動後就會自動執行該目錄下的所有shell腳本。
(3)通過chkconfig命令設置
將啟動文件cp到 /etc/init.d/或者/etc/rc.d/init.d/(前者是後者的軟連接)下
vim 啟動文件,文件前面務必添加如下三行代碼,否側會提示chkconfig不支持
#!/bin/sh 告訴系統使用的shell,所以的shell腳本都是這樣
#chkconfig: 35 20 80 分別代表運行級別,啟動優先權,關閉優先權,此行代碼必須
#description: http server(自己隨便發揮)//兩行都注釋掉!!!,此行代碼必須
chkconfig --add 腳本文件名 操作後就已經添加了
B. Nginx,一看就會
Nginx("engine x") 是一個高性能的 HTTP 和反向代理伺服器,特點是佔有內存少,並發能力強,事實上 nginx 的並發能力確實在同類型的網頁伺服器中表現較好,中國大陸使用 nginx 網站用戶有:網路、京東、新浪、網易、騰訊、 淘寶等。
1.1 WEB 伺服器
Nginx 可以作為靜態頁面的 web 伺服器,同時還支持 CGI 協議的動態語言,比如 perl、php
等。但是不支持 java。Java 程序只能通過與 tomcat 配合完成。Nginx 專為性能優化而開發,性能是其最重要的考量,實現上非常注重效率 ,能經受高負載的考驗,有報告表明能支持高達 50000個並發連接數。
1.2 反向代理
1.正向代理,代理客戶端,客戶端需要配置代理
2.反向代理,代理服務端,客戶端無感知
1.3 負載均衡
Nginx 的非同步框架可以處理很大的並發請求,把這些並發請求 hold 住之後就可以分發給後台服務端(backend servers,也叫做服務池, 後面簡稱 backend)來做復雜的計算、處理和響應,這種模式的好處是相當多的:隱藏業務主機更安全,節約了公網 IP 地址,並且在業務量增加的時候可以方便地擴容後台伺服器。
這時候集群的概念產生了,我們增加伺服器的數量,然後將請求分發到各個伺服器上,將原先請求集中到單個伺服器上的情況改為將請求分發到多個伺服器上,將負載分發到不同的服器,也就是我們所說的負載均衡。
1.4 動靜分離
為了加快網站的解析速度,可以把動態頁面和靜態頁面由不同的伺服器來解析,加快解析速度。降低原來單個伺服器的壓力。
Nginx官網
2.1 相關安裝包
pcre-8.37.tar.gz openssl-1.0.1t.tar.gz zlib-1.2.8.tar.gz nginx-1.11.1.tar.gz
2.2 安裝流程
2.1.1.安裝 pcre 解壓縮 pcre-xx.tar.gz 包
進入解壓縮目錄,執行./configure
如果提示,需要提前安裝 gcc++,進入安裝光碟目錄的軟體包(/media/CentOSXX/Package)執行
rpm -ivh libstdc+ devel-4.4.7-17.el6.x86_64.rpm
rpm -ivh gcc-c+ 4.4.7-17.el6.x86_64.rpm
./configure 完成後,回到 pcre 目錄下執行 make,再執行 make install
2.2.2.安裝 openssl
解壓縮 openssl-xx.tar.gz 包。
進入解壓縮目錄,執行./config
make && make install
2.2.3.安裝 zlib 解壓縮 zlib-xx.tar.gz 包。
進入解壓縮目錄,執行./configure。
make && make install
2.2.4.安裝 nginx
解壓縮 nginx-xx.tar.gz 包。
進入解壓縮目錄,執行./configure。
make && make install
查看開放的埠號
firewall-cmd --list-all
設置開放的埠號
firewall-cmd --add-service=http –permanent
sudo firewall-cmd --add-port=80/tcp --permanent
重啟防火牆
firewall-cmd –reload
2.3 Nginx 啟動
命令
啟動命令:在/usr/local/nginx/sbin 目錄下執行 ./nginx
關閉命令: 在/usr/local/nginx/sbin 目錄下執行 ./nginx -s stop
重新載入命令: 在/usr/local/nginx/sbin 目錄下執行 ./nginx -s reload·
設置 nginx 為自啟動服務
修改 linux 啟動腳本/etc/rc.d/rc
加入 :/usr/local/nginx/sbin/nginx
nginx 安裝目錄下,其默認的配置文件都放在conf 目錄下,而主配置文件nginx.conf 也在其中,後續對 nginx 的使用基本上都是對此配置文件進行相應的修改。
根據上述文件,我們可以很明顯的將 nginx.conf 配置文件分為三部分
第一部分:全局塊
從配置文件開始到 events 塊之間的內容,主要會設置一些影響 nginx 伺服器整體運行的配置指令,主要包括配置運行 Nginx 伺服器的用戶(組)、允許生成的 worker process 數,進程 PID 存放路徑、日誌存放路徑和類型以及配置文件的引入等。
比如上面第一行配置的:worker_processes 1;
這是 Nginx 伺服器並發處理服務的關鍵配置,worker_processes 值越大,可以支持的並發處理量也越多,但是會受到硬體、軟體等設備的制約。
第二部分:events 塊
events 塊涉及的指令主要影響 Nginx 伺服器與用戶的網路連接,常用的設置包括是否開啟對多 work process 下的網路連接進行序列化,是否允許同時接收多個網路連接,選取哪種事件驅動模型來處理連接請求,每個 word process 可以同時支持的最大連接數等。
上述例子就表示每個 work process 支持的最大連接數為 1024.
這部分的配置對 Nginx 的性能影響較大,在實際中應該靈活配置。
第三部分:http 塊
這算是 Nginx 伺服器配置中最頻繁的部分,代理、緩存和日誌定義等絕大多數功能和第三方模塊的配置都在這里。
需要注意的是:http 塊也可以包括 http 全局塊、server 塊。
http 全局塊
http 全局塊配置的指令包括文件引入、MIME-TYPE 定義、日誌自定義、連接超時時間、單鏈接請求數上限等。
server 塊
這塊和虛擬主機有密切關系,虛擬主機從用戶角度看,和一台獨立的硬體主機是完全一樣的,該技術的產生是為了節省互聯網伺服器硬體成本。
每個 http 塊可以包括多個 server 塊,而每個 server 塊就相當於一個虛擬主機。
而每個 server 塊也分為全局 server 塊,以及可以同時包含多個 locaton 塊。
全局 server 塊
最常見的配置是本虛擬機主機的監聽配置和本虛擬主機的名稱或 IP 配置。
location 塊
一個 server 塊可以配置多個 location 塊。
這塊的主要作用是基於 Nginx 伺服器接收到的請求字元串(例如 server_name/uri-string),對虛擬主機名稱(也可以是 IP 別名)之外的字元串(例如 前面的 /uri-string)進行匹配,對特定的請求進行處理。地址定向、數據緩存和應答控制等功能,還有許多第三方模塊的配置也在這里進行。
案例配置如下:
location 指令說明
該指令用於匹配 URL,語法如下:
= :用於不含正則表達式的 uri 前,要求請求字元串與 uri 嚴格匹配,如果匹配
成功,就停止繼續向下搜索並立即處理該請求。
~:用於表示 uri 包含正則表達式,並且區分大小寫。
~*:用於表示 uri 包含正則表達式,並且不區分大小寫。
^~:用於不含正則表達式的 uri 前,要求 Nginx 伺服器找到標識 uri 和請求字
符串匹配度最高的 location 後,立即使用此 location 處理請求,而不再使用 location
塊中的正則 uri 和請求字元串做匹配。
注意:如果 uri 包含正則表達式,則必須要有 ~ 或者 ~* 標識。
案例配置如下:
在 linux 下有 Nginx、LVS、Haproxy 等等服務可以提供負載均衡服務,而且 Nginx 提供了幾種分配方式(策略):
輪詢(默認)
每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器 down 掉,能自動剔除。
weight
weight 代表權重,默認為 1,權重越高被分配的客戶端越多指定輪詢幾率,weight 和訪問比率成正比,用於後端伺服器性能不均的情況。
ip_hash
每個請求按訪問 ip 的 hash 結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決 session 的問題。
fair(第三方)
按後端伺服器的響應時間來分配請求,響應時間短的優先分配。
動靜分離從目前實現角度來講大致分為兩種:
1.一種是純粹把靜態文件獨立成單獨的域名,放在獨立的伺服器上,也是目前主流推崇的方案;
2.另外一種方法就是動態跟靜態文件混合在一起發布,通過 nginx 來分開。
通過 location 指定不同的後綴名實現不同的請求轉發。通過 expires 參數設置,可以使瀏覽器緩存過期時間,減少與伺服器之前的請求和流量。具體 Expires 定義:是給一個資源設定一個過期時間,也就是說無需去服務端驗證,直接通過瀏覽器自身確認是否過期即可,所以不會產生額外的流量。此種方法非常適合不經常變動的資源。(如果經常更新的文件,不建議使用 Expires 來緩存),我這里設置 3d,表示在這 3 天之內訪問這個 URL,發送一個請求,比對伺服器該文件最後更新時間沒有變化,則不會從伺服器抓取,返回狀態碼304,如果有修改,則直接從伺服器重新下載,返回狀態碼 200。
master-workers 的機制的好處
首先,對於每個 worker 進程來說,獨立的進程,不需要加鎖,所以省掉了鎖帶來的開銷,
同時在編程以及問題查找時,也會方便很多。其次,採用獨立的進程,可以讓互相之間不會
影響,一個進程退出後,其它進程還在工作,服務不會中斷,master 進程則很快啟動新的
worker 進程。當然,worker 進程的異常退出,肯定是程序有 bug 了,異常退出,會導致當
前 worker 上的所有請求失敗,不過不會影響到所有請求,所以降低了風險。
需要設置多少個 worker
Nginx 同 redis 類似都採用了 io 多路復用機制,每個 worker 都是一個獨立的進程,但每個進
程里只有一個主線程,通過非同步非阻塞的方式來處理請求, 即使是千上萬個請求也不在話
下。每個 worker 的線程可以把一個 cpu 的性能發揮到極致。所以 worker 數和伺服器的 cpu
數相等是最為適宜的。設少了會浪費 cpu,設多了會造成 cpu 頻繁切換上下文帶來的損耗。
連接數 worker_connection
這個值是表示每個 worker 進程所能建立連接的最大值,所以,一個 nginx 能建立的最大連接數,應該是 worker_connections * worker_processes。當然,這里說的是最大連接數,對於HTTP 請 求 本 地 資 源 來 說 , 能 夠 支 持 的 最 大 並 發 數 量 是 worker_connections * worker_processes,如果是支持 http1.1 的瀏覽器每次訪問要佔兩個連接,所以普通的靜態訪問最大並發數是: worker_connections * worker_processes /2,而如果是 HTTP 作 為反向代理來說,最大並發數量應該是 worker_connections *
worker_processes/4。因為作為反向代理伺服器,每個並發會建立與客戶端的連接和與後端服務的連接,會佔用兩個連接。
注意:此部分屬於高級技術,近幾日會將下面的知識點補充完畢。
8.1 Keepalived+Nginx 高可用集群(主從模式)
8.2 Keepalived+Nginx 高可用集群(雙主模式)
C. linux 安裝nginx後怎麼啟動
以Centos為例:
1、6.0以前的版本創建/etc/init.d/nginx啟動腳本
/etc/init.d/nginx start即可啟動
chkconfig nginx on設置開機自啟動
2、7.0需要創建nginx.service放到/usr/lib/systemd/system
systemctl start nginx
systemctl enable nginx
D. Linux服務開機自啟動三種方式,你覺得哪種最優雅
很多時候,我們需要將一些服務在Linux系統啟動時即自動運行,省得每次都要去手動啟動一遍,如Redis, MySQL, Nginx等。本文對CentOS與Ubuntu下開機自啟動的配置方法進行整理,供參考查閱。
rc.local是CentOS以前版本的方式,在CentOS7中仍然以兼容的形式存在,雖仍可用,但不推薦(推薦使用systemd service)。
1、編寫需要開機自啟動的腳本,並添加執行許可權
作為測試,上述腳本列印一個時間到/tmp/test.log文件中
2、在/etc/rc.d/rc.local配置文件中添加腳本運行命令(使用絕對路徑)
3、添加/etc/rc.d/rc.local文件的執行許可權
在centos7中,/etc/rc.d/rc.local沒有執行許可權,需要手動授權
以上三步,即可使/root/test_rclocal.sh >/dev/null 2>/dev/null 命令在伺服器系統啟動時自動運行。
1、編寫需要開機自啟動的測試腳本,並添加執行許可權
2、在/etc/rc.d/init.d/目錄下添加一個可執行腳本testchkconfig
上述testchkconfig腳本的頭部必須遵循一定的格式 # chkconfig: 2345 90 10, 其中2345指定服務在哪些執行等級中開啟或關閉,90表示啟動的優先順序(0-100,越大優先順序越低),10表示關閉的優先順序。執行等級包括
3、加入開機啟動服務列表
使用 chkconfig --list 可查看當前加入開機自啟動的服務列表,但如Note部分所述,該命令只顯示SysV服務,不包含原生的systemd服務,查看systemd服務可使用systemctl list-unit-files命令。
以上三步,即可使/root/test_chkconfig.sh >/dev/null 2>/dev/null 命令在伺服器系統啟動時自動運行。
chkconfig的其它命令參考
CentOS7的systemd服務腳本存放在:/usr/lib/systemd/system(系統級)/usr/lib/systemd/user(用戶級)下,以.service結尾。這里以nginx為例
1、在/usr/lib/systemd/system目錄下創建nginx.service文件
其中Service部分的Type包括如下幾種類型:
2、 開啟開機自啟動
以上兩步,就將nginx服務配置成了在操作系統啟動時自動啟動。
其它命令參考
從字面看是PID文件不可讀,查看/var/run/nginx.pid,該文件也確實不存在,查看nginx.conf配置文件,發現是pid /var/run/nginx.pid;這行配置被注釋掉了, 如果不指定pid文件位置,nginx默認會把pid文件保存在logs目錄中。所以出現systemd啟動服務時找不到pid文件而報錯,將nginx.conf中的pid配置注釋去掉,重啟nginx.service即可。
在Ubuntu18.04中,主要也是以systemd服務來實現開機自啟動,systemd默認讀取/etc/systemd/system/下的配置文件,該目錄下的一些文件會鏈接到/lib/systemd/system/下的文件。
因此可以在/etc/systemd/system/目錄下面創建一個自啟動服務配置,以內網穿透服務frp客戶端為例,如
各配置項與CentOS類似。然後將伺服器加到自啟動列表中並啟動服務
其它更多systemctl命令與CentOS類似。
也可以使用/lib/systemd/system/rc-local.service來執行一些開機需要執行的腳本,該文件內容為
從Description看它是為了兼容之前版本的/etc/rc.local的,該服務啟動命名就是/etc/rc.local start,將該文件鏈接到/etc/systemd/system下
創建/etc/rc.local文件,並賦予可執行許可權
作者:半路雨歌
鏈接:https://juejin.cn/post/6844904104515338248
E. centos7怎麼編譯安裝nginx
安裝環境為:最小化安裝的centos7,關閉seliunx。
最小化安裝centos:
關閉selinux
sed –i 『s/SELINUX=enforcing/SELINUX=disabled/g』 /etc/selinux/config
開始安裝nginx1.7.8
創建群組
groupadd www
創建一個用戶,不允許登陸和不創主目錄
useradd -s /sbin/nologin -g www -M www
#下載最新版nginx
wget -C http://nginx.org/download/nginx-1.7.8.tar.gz
tar zxvf nginx-1.7.8.tar.gz
#編譯基本能運行的nginx
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_mole --with-http_ssl_mole --with-http_gzip_static_mole
make
make install
如果有錯誤提示:
./configure: error: C compiler cc is not found
解決方法:
yum install gcc gcc-c++
如果有錯誤提示:
./configure: error: the HTTP rewrite mole requires the PCRE library.
You can either disable the mole by using –without-http_rewrite_mole
option, or install the PCRE library into the system, or build the PCRE library
statically from the source with nginx by using –with-pcre=<path> option.
解決方法:
yum install pcre-devel
如果有錯誤提示:
./configure: error: SSL moles require the OpenSSL library.
You can either do not enable the moles, or install the OpenSSL library
into the system, or build the OpenSSL library statically from the source
with nginx by using –with-openssl=<path> option.
解決方法:
yum install openssl-devel
以上錯誤提示依次解決後:再一次的運行
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_mole --with-http_ssl_mole --with-http_gzip_static_mole
make
meke install
編譯參數解釋:
#指定運行許可權的用戶
--user=www
#指定運行的許可權用戶組
--group=www
#指定安裝路徑
--prefix=/usr/local/nginx
#支持nginx狀態查詢
--with-http_stub_status_mole
#開啟ssl支持
--with-http_ssl_mole
#開啟GZIP功能
--with-http_gzip_static_mole
因此要順利的通過nginx編譯安裝必須安裝的依賴關系有:
yum install gc gcc gcc-c++ pcre-devel zlib-devel openssl-devel
2、在 centos7 中為nginx的啟動、重啟、重載配置添加腳本
nginx直接啟動的方法:
/usr/local/nginx/sbin/nginx
但是不是很方便,因此使用下面的腳本來控制nginx的啟動關閉重載更加合理一些。
編輯文件:vim /usr/lib/systemd/system/nginx.service 添加下面的腳本,注意路徑 !
[Unit]
Description=nginx - high performance web server
Documentation=http://nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
systemctl的一些使用方法:
systemctl is-enabled servicename.service #查詢服務是否開機啟動
systemctl enable xxx.service #開機運行服務
systemctl disable xxx.service #取消開機運行
systemctl start xxx.service #啟動服務
systemctl stop xxx.service #停止服務
systemctl restart xxx.service #重啟服務
systemctl reload xxx.service #重新載入服務配置文件
systemctl status xxx.service #查詢服務運行狀態
systemctl --failed #顯示啟動失敗的服務
因此,添加上面腳本後,centos7 中操作nginx的方法有
systemctl is-enabled nginx.service #查詢nginx是否開機啟動
systemctl enable nginx.service #開機運行nginx
systemctl disable nginx.service #取消開機運行nginx
systemctl start nginx.service #啟動nginx
systemctl stop nginx.service #停止nginx
systemctl restart nginx.service #重啟nginx
systemctl reload nginx.service #重新載入nginx配置文件
systemctl status nginx.service #查詢nginx運行狀態
systemctl --failed #顯示啟動失敗的服務
F. Nginx配置開機啟動 /etc/init.d/nginx
在Nginx官網上的 NGINX Init Scripts 選擇啟動腳本,我隱陪這里是CentOS系統,選擇 Red Hat NGINX Init Script , 將腳本拷貝到/etc/init.d/nginx
仔細觀察腳本,腳本裡面的nginx的相關路圓攜睜徑與本機安裝的路徑不一致。
根據以上路徑的不同創建軟連接
執行 killall -9 nginx 關橘歲閉nginx服務即可
G. centos中nginx怎麼啟動
Nginx的啟動 /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf 其中-c參數指定配置文件路徑。 Nginx的停止 Nginx支持以下幾種信號控制: TERM, INT 快速關閉 QUIT 從容關閉 HUP 平滑重啟 USR1 重新打開日誌文件,在切割文件時用處大 USR2 平滑升級 WINCH 從容關閉工作進程 我們可以通過信號停止Nginx主進程,首先,我們需要通過ps-ef|grep命令獲得master進程的PID,或者通過cat pid文件獲得主進程號。
Nginx的啟動
H. linux開機自啟動,如何跳過開機動畫
某個程序方便後續的管理;那麼我們如何在開機時候,運行此賬戶安裝的程序呢?例如:以linux下指定mycount用戶在linux開機時執行/home/sun/startXX.sh為例:
以root登錄linux
執行vi /etc/rc.d/rc.local
在文檔末尾添加一行語句:su – mycount -c 「/home/sun/startXX.sh」
保存rc.local即可。
這個地方一定要注意 su – 這個是環境的變數也會做相應的轉換;如果環境變數沒有改變的話,我們用su 就可以了。
二、
在Linux中以普通用戶開機自動運行腳本程序
測試環境:CentOS6.5
管理員:root
普通用戶:test1
實現目標:在Linux啟動時,以普通用戶test1自動運行位於根目錄下的腳本程序test.py,該程序會在每次執行時自動向本地日誌文件追加一條記錄,源碼如下:
from datetime import datetime
now=datetime.now()
f=open(『test.log』,』a』)
f.write(『%s 『%now)
f.close()
Linux在啟動時,會自動執行/etc/rc.d目錄下的初始化程序,因此我們可以把啟動任務放到該目錄下,有兩種辦法:
方案一:
1、因為其中的rc.local是在完成所有初始化之後執行,因此我們可以把啟動腳本寫到裡面
2、用root賬號登陸Linux,vi /etc/rc.d/rc.local編輯文件,在最後加入兩行需要執行的腳本程序:
cd /home/test1 –該步不可少,否則會提示沒有許可權打開』test.log』文件
su test1 -c 「python /home/test1/test.py」 –把要執行的命令作為一個參數傳遞級su
方案二:
1、init.d目錄下都為可執行程序,他們其實是服務腳本,按照一定格式編寫,Linux 在啟動時會自動執行,類似Windows下的服務
2、用root帳號登錄,vi /etc/rc.d/init.d/mystart,追加如下內容:
復制代碼
#!/bin/bash
#chkconfig:2345 80 05 –指定在哪幾個級別執行,0一般指關機,
6指的是重啟,其他為正常啟動。80為啟動的優先順序,05為關閉的優先機
#description:mystart service
RETVAL=0
start(){ –啟動服務的入口函數
echo -n 「mystart serive …」
cd /home/test1
su test1 -c 「python /home/test1/test.py」
}
stop(){ –關閉服務的入口函數
echo 「mystart service is stoped…」
}
case $1 in –使用case,可以進行互動式操作
start)
start
;;
stop)
stop
;;
esac
exit $RETVAL
復制代碼
3、運行chmod +r /etc/rc.d/init.d/mystart,使之可直接執行
4、運行chkconfig –add mystart,把該服務添加到配置當中
5、運行chkconfig –list mystart,可以查看該服務進程的狀態
總結:
兩種方案的的核心都是切換用戶到test1,然後執行命令啟動Python程序,做成服務的好處是可以定義多個交互命令,比如:start,stop,restart,reset…,在服務運行的過程中還可以做相應操作。最開始的時候,我按照一般的思路寫了如下腳本,卻怎麼也執行不了:
su test1 –切換到test1用戶
cd /home/test1 –切換到根目錄
python test.py –執行python程序
exit –退出test1帳號
看起來好象一切都沒錯,但是發現只運行了第一行的命令,後面的都沒有運行,直到退出test1用戶後才發現好象執行完畢。分析原因,是因為Linux啟動的時候是在root帳號下,執行su test1等於打開了一個新的shell腳本,因此下面的代碼都在等著新的Shell腳本結束才能運行,就象在主程序里調用了一個子程序,而子程序是個死循環,一下出來來結果下面的要等死了。知道了發生的原因,那麼解決的辦法就相對簡單了,就是在執行上述腳本程序時,不要離開本身的Shell。我們可以把執行命令做為su的一個參數傳遞進去,因為沒有涉及到打開新的Shell,因此可以正常執行你期望的腳本程序,順利實現開機自動啟動指定的腳本程序。
執行方案中重要的一個命令是:
[root@localhost ~]# whoami
root
[root@localhost ~]# su – keysystem -c 「whoami」
keysystem
[root@localhost ~]#
以keysystem用戶執行whoami的命令:
[root@localhost ~]# su – keysystem -c 「whoami」
文章知識點與官方知識檔案匹配
CS入門技能樹Linux入門初識Linux
23840 人正在系統學習中
打開CSDN,閱讀體驗更佳
Linux中沒有rc.local文件的完美解決方法
主要介紹了Linux中沒有rc.local文件的解決方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
最新發布 linux 開機自啟用非root啟動
就會用djq用戶執行mkdir -p /home/djq/222命令。linux 開機自啟用非root啟動。
繼續訪問
linux開機自動執行命令或自動啟動程序(rc.local)
linux開機的最後會執行/etc/rc.local,因此可以在此腳本裡面添加shell命令自動執行或者自動啟動某個進程。 比如 自動輸出信息: #!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In
繼續訪問
跳過網路啟動 linux,Linux啟動時如何跳過fsck
在Linux里,如果一個文件系統被mount過一定次數後,或者距離上次fsck超過一定天數,當系統重起時就會自動fsck。根據文件系統的大小,fsck可能需要幾分鍾甚至幾個小時。隔一段時間作一次fsck是很有必要的,但是如果你不想花費時間fsck,你也可以用如下幾種方法跳過fsck:1. 修改/etc/fstab在/etc/fstab里, 最後一列是系統啟動時fsck的順序。 文件系統 / 應該設...
繼續訪問
linux 查看root 進程,Linux查看非root運行的進程
Linux查看非root運行的進程youhaidong@youhaidong-ThinkPad-Edge-E545:~$ ps -U root -u root -NPID TTY TIME CMD663 ? 00:00:00 dbus-daemon713 ? 00:00:00 rsyslogd730 ? 00:00:00 avahi-da...
繼續訪問
linux上使用非root賬戶啟動運行java程序
事情是這樣的、、、、、、、 公司的app後台程序是java的,在linux上運行時要求必須使用非root賬戶,例如使用app用戶啟動java程序。這次運維有事請假了,所以這個小任務就交給我了,多大的事情啊,這還不是分分鍾搞定的啊。 好了一步步的開始。 第一步:創建mobile賬戶和組 groupadd app useradd -d /usr/app -g app app 第二步:搭建...
繼續訪問
linux用其他賬號停進程,Linux系統上對其他用戶隱藏進程的簡單方法
我使用的是多用戶系統,大部分的用戶通過ssh客戶端訪問他們的資源。我如何(怎麼樣)避免泄露進程信息給他們?如何(怎麼樣)在Debian/Ubuntu/RHEL/CentOS linux伺服器器上阻止/避免他們看到不屬於他們的進程?對linux上的其他用戶隱藏進程的方法解決方法/方案:如果你使用的linux kernel(內核)是3.2以上的版本(或者使用的RHEL/CentOS是6.5以上的版本)...
繼續訪問
轉:linux開機自動運行
實現目標:在Linux啟動時,自動運行位於普通用戶test1根目錄下的腳本程序test.py,該程序會在每次執行時自動向本地日誌文件追加一條記錄,源碼如下: from datetime import datetime now=datetime.now() f=open('test.log','a') f.write('%s '%now...
繼續訪問
跳過開機向導
跳過開機向導
繼續訪問
linux系統rc.local錯誤,Linux開機啟動文件rc.local無法執行的解決方法
眾所周知,rc.local是Linux系統中的一個重要的開機啟動文件,每次開機都要執行這個文件。但最近很多用戶表示系統無法執行這個問題件,從而導致了一系列的問題出現,這是怎麼回事呢?如何解決這個問題呢?下面,跟隨小編一起來看看Linux開機啟動文件rc.local無法執行的解決方法。Linux系統在Linux系統中,有一個重要的開機自動啟動腳本文件:/etc/rc.local---》/etc/rc...
繼續訪問
rc.local出錯影響ubuntu正常啟動,跳過執行rc.local
通過進入單用戶模式,跳過rc.local
繼續訪問
Linux開機啟動,設置rc.local失效解決方案
在/etc/rc.local文件夾下,添加要執行的命令,如/sbin/ifconfig docker0 mtu 1454 注意這里要使用絕對路徑/sbin/ifconfig 如果開機發現執行失敗,則需要在上一行添加sleep 10 由於ifconfig服務不一定在rc.local之前啟動,所以讓系統等待十秒hours在執行sleep 10 /sbin/ifconfig docker0 mtu 14
繼續訪問
Linux系統跳過密碼登錄
一、引導系統 RHEL7的標准引導系統是GRUB2,RHEL6默認使用GRUB1,這里主要講GRUB2。 在Linux系統開機選擇內核時,按下e進入內核引導參數的編輯菜單,找到以linux16開頭的一行,在行末添加更多的命令。例如,在行末尾添加system.unit=emergency.target,然後按Ctrl+X,則系統將會以緊急目標模式啟動。 如果在系統引導到GUI環境中出現問題,可以在內核命令行末尾加入system.unit=multi-user.target,若引導成功,則會登錄到命令行模
繼續訪問
rc.local使用非root用戶
su -aaa-c "/data/tomcat/bin/startup.sh"
繼續訪問
Linux設置非root用戶啟動程序
Linux設置非root用戶啟動程序
繼續訪問
開機自啟動非root用戶的服務
設置非root用戶的服務開機自啟動 比如:chkconfig mysql on 是無效的 可以這樣設置: 在root用戶下 vi /etc/rc.local 或者 vi /etc/rc.d/rc.local 在最後一行加上 su - mysqladmin -c "/usr/local/mysql/startMysql.sh" 其中mysqladmin是管理mysql的用戶, "/usr/loc...
繼續訪問
linux非root用戶打開80,Linux非root用戶如何使用80埠啟動程序
默認情況下Linux的1024以下埠是只有root用戶才有許可權佔用,我們的tomcat,apache,nginx等等程序如果想要用普通用戶來佔用80埠的話就會拋出java.net.BindException: Permission denied:80的異常。bind時perror提示錯誤信息:permission denied解決辦法有兩種:1.使用非80埠啟動程序,然後再用iptables...
繼續訪問
Linux在任意目錄下執行指定的腳本
前言 我有個腳本,我只能在腳本所在的文件夾下面運行,這樣的話很不方便,如果我去了別的目錄下面的話,我就無法運行這個腳本了… 解決 在profile中設置PATH, 假如我想給 xcall 腳本設置能讓在任意的目錄下去運行, 此時xcall在/root/soft/script 目錄下. 編輯環境變數 [root@zjj101 etc]# cd /etc [root@zjj101 etc]# vim profile # 上面省略........ export HIVE_HOME=/root/soft/hive
繼續訪問
Linux系統啟動過程分析
經過對Linux系統有了一定了解和熟悉後,想對其更深層次的東西做進一步探究。這當中就包括系統的啟動流程、文件系統的組成結構、基於動態庫和靜態庫的程序在執行時的異同、協議棧的架構和原理、驅動程序的機制等等。 本人在綜合了現有網上大家智慧的基礎上,結合對2.6.32的內核代碼的研讀,基於CentOS 6.0系統對Linux的啟動流程做了些分析。由於才疏學淺,知...
繼續訪問
linux跳過開機啟動項