部署-雲服務器-運維
運維常用指令
如何使用log:
1.用deploy登陸。
2.cd ~/xxx/current. 進入Rails程序的當前目錄下。
3.tail -n 500 log/production.log 查看最近期的500條記錄。
4.tail -f log/production.log 這樣一直掛著,隨時看最新的紀錄。
許多程序數據庫的log都可以在/var/log中找到對應的文件夾。如mysql, redis, nginx。
Rails的錯誤信息,有可能發生在Nginx。log位置在
/var/log/nginx/error.log
打開這個文件需要root身份。
另外:/var/log/nginx/access.log
查看系統狀態
free -h 顯示內存用量
df -h 顯示硬盤剩餘空間, disk file
sudo passenger-status 顯示 Passenger 狀態:主要觀察 Passenger 開了多少個 Rails 進程(默認最多開6個,如果機器的內存夠多,你可以調整 Nginx 設定 passenger_max_pool_size 增加更多進程來服務更多流量)
sudo passenger-memory-stats 顯示 Passenger 內存狀態,主要觀察每個 Rails 進程耗費多少內存
---- Passenger processes -----
PID VMSize Private Name
-------------------------------
24591 404.0 MB 77.1 MB Passenger AppPreloader:/home/deploy/transaction/current (forking…)
top 動態查看系統狀態,主要可以看 CPU 負載情形,以及哪些進程在忙.
ps ax 顯示目前所有進程(process)一個快照,
用 sudo kill -9 <PID> 可以強制刪除該程序,這是最後手段。
因為,內核立即終止被kill的進程。當一個進程以這種方式終止的時候,它沒有機會去做些“清理”工作,或者是保存工作。 因為這個原因,把 KILL 信號看作最後一招,當其它終止信號失敗後,再使用它。
kill [-signal] PID...
kill 命令不是真的“殺死”程序,而是給程序發送信號。
signal有多個:一般用數字表示,-9就是強行終止程序。
信號是操作系統與程序之間進行通信時所采用的幾種方式中的一種。
比如ctrl + c, 這個組合按鍵就是一個信號。使用它會發送一個(Interrupt,中斷)的信號。
程序,相應地,監聽信號的到來,當程序 接到信號之後,則做出響應。
排查
網站如果無法正常運作,第一個檢查網絡是否正常,是不是可以 SSH 連線進去。如果第一關就卡住了,可能整臺機器已經蒙了,這時候需要回到雲服務的後臺,強制關機重開。
如果可以連線進去,就先檢查目前系統負載情形,是不是內存不夠了? 或是硬盤滿了?
如果是 Passenger 進程太多人塞住了,可以先嘗試重開 Nginx 讓網站恢復運作。
如果還是沒多久還是一樣,就需要進一步看 log 檢查是哪一個環節不正常。
網站服務器重啟指令
默認安裝完以及開機後,就會啟動 Nginx。如果有修改 Nginx 設定檔,需要重開 Nginx。
啟動 sudo service nginx start
停止 sudo service nginx stop
重開 sudo service nginx restart
如果只是要重開 Rails,可以不重開 Nginx。在你的 Rails 目錄下(例如 /home/deploy/rails-recipes/current 這個目錄)執行 touch tmp/restart.txt 即可,這樣 Passenger 就會知道要重新加載 Rails,而不需要重開 Nginx。(不理解,因為只是新建一個file而已。)
在遠端如何進 rails console?
用deploy身份:
cd ~/.your_project/current
執行 bundle exec rails c -e production
如何在遠端跑 rake?
用deploy身份:
cd ~/.your_project/current
執行 RAILS_ENV=production bundle exec rake db:seed
整理 Log 檔案
參考https://zhuanlan.zhihu.com/p/24880144
Linux 內建有 logrotate 工具,可以定期清空和壓縮 Log 檔案。
使用/etc/logrotate.d 日誌管理文件夾來自定義應用的配置。
該目錄裏的所有文件都會被主動的讀入到/etc/logrotat.conf中執行。
新增touch rails 檔案:
/home/deploy/your_appname/shared/log/*.log { daily dateext missingok rotate 65535 compress notifempty copytruncate }
- daily 表示每天整理,也可以改成 weekly 或 monthly
- dateext 表示檔案補上 rotate 的日期
- missingok 表示如果找不到 log 檔也沒關系
- rotate 表示保留65535份,建議如果硬盤空間夠的話,就不要砍log檔了,以供未來備查
- compress 表示壓縮起來,默認用 gzip
- delaycompress 表示延後壓縮直到下一次 rotate
- notifempty 表示如果 log 檔是空的,就不 rotate
- copytruncate 先復制 log 檔的內容後,再清空的作法,因為有些程式一定 log 在本來的檔名,例如 rails。另一種方法是 create。
具體說明在server讀man logrotate
運行logrotate:
執行logrotate /etc/logrotate.d/your_app_name
參數:
-d, 測試日誌切割(debug)
-vf, 強制輪詢切割日誌(verbose and force)
如果linux沒有,安裝
sudo apt-get logrotate
部署-雲服務器-運維