Posted on

Ubuntu 18.04的apt update更新失敗

錯誤訊息

W: Failed to fetch http://repo.mysql.com/apt/ubuntu/dists/bionic/InRelease The following signatures couldn’t be verified because the public key is not available: NO_PUBKEY 467B942D3A79BD29 W: Some index files failed to download. They have been ignored, or old ones used instead.

問題原因

這個錯誤訊息是說您的系統在嘗試從 http://repo.mysql.com/apt/ubuntu/dists/bionic/ 的軟體庫中下載軟體索引時發生了問題。這可能是由於網路連線中斷或是軟體庫網址變更所導致。

訊息中提到的 “NO_PUBKEY 467B942D3A79BD29” 表示您的系統沒有此軟體庫的公鑰,導致無法驗證下載的軟體索引是否是正確的。

解決方案

要解決這個問題,您可以試著更新系統的軟體庫並且安裝相關的公鑰。在終端機中執行以下指令:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 467B942D3A79BD29
sudo apt-get update

這個指令會從 Ubuntu 的公鑰伺服器中下載指定的公鑰,並且更新系統的軟體庫。完成後,您可以再次嘗試安裝所需的軟體,看看問題是否已經解決了。

Posted on 2 Comments

Linux 設定排程 – crontab

查看與編輯 crontab

查看自己的 crontab
crontab -l
查看指定使用者的 crontab
sudo crontab -u gtwang -l
編輯 crontab 內容
crontab -e
編輯指定使用者的 crontab
crontab -u gtwang -e
刪除 crontab 內容
crontab -r

crontab設定檔撰寫教學

# For details see man 4 crontabs

# Example of job definition:
# .—————- minute (0 – 59)
# | .————- hour (0 – 23)
# | | .———- day of month (1 – 31)
# | | | .——- month (1 – 12) OR jan,feb,mar,apr …
# | | | | .—- day of week (0 – 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

範例如下:
# 每天早上 8 點 30 分執行
30 08 * * * /home/gtwang/script.sh –your –parameter

# 每週日下午 6 點 30 分執行
30 18 * * 0 yourcommand

# 每週日下午 6 點 30 分執行
30 18 * * Sun yourcommand

# 每年 6 月 10 日早上 8 點 30 分執行
30 08 10 06 * yourcommand

# 每月 1 日、15 日、29 日晚上 9 點 30 分各執行一次
30 21 1,15,29 * * yourcommand

# 每隔 10 分鐘執行一次
*/10 * * * * yourcommand

# 從早上 9 點到下午 6 點,凡遇到整點就執行
00 09-18 * * * yourcommand

crontab設定檔的特殊字元

特殊字元 代表意義
星號(* 代表接受任意時刻,例如若在月份那一欄填入星號,則代表任一月份皆可。
逗號(, 分隔多個不同時間點。例如若要指定 3:00、6:00 與 9:00 三個時間點執行指令,就可以在第二欄填入 3,6,9
減號(- 代表一段時間區間,例如若在第二欄填入 8-12 就代表從 8 點到 12 點的意思,也就是等同於 8,9,10,11,12
斜線加數字(/n n 代表數字,這樣寫的意思就是「每隔 n 的單位」的意思,例如若在第一欄填入 */5 就代表每間隔五分鐘執行一次的意思,也可以寫成 0-59/5
Posted on

解決Windows下路徑名稱異常問題

名稱有中文或空白的問題

使用cmd指令時,有許多command line執行的工具,當路徑若出現中文或是空白時,會導致執行失敗。
例如C:\Program Files因為中間有一個空格,就很容易造成在執行時出現錯誤

若遇到這種狀況,建議可以改用資料夾的縮寫
例如
C:\PROGRA~1取代C:\Program Files
C:\PROGRA~2取代C:\Program Files (x86)

如何查找資料夾名稱縮寫

C:\Users\claire.chang>dir /x

以上圖來說,資料夾.android的縮寫即為ANDROI~1

Posted on

Linux下大檔案的log分割處理

使用指令分割大檔案

按檔案大小分割
[root@localhost]$ split -C 100M large_file.txt stxt
按行數分割
[root@localhost]$ split -l 1000 large_file.txt stxt
二進位檔案分割(以-b引數來指定分割後的檔案大小)
[root@localhost]$ split -b 100M data.bak sdata

固定時間切割LOG檔案

logrotate官方說明: https://linux.die.net/man/5/logrotate.conf

logrotate旨在簡化對生成大量日誌文件的系統的管理。它允許自動旋轉,壓縮,刪除和郵寄日誌文件。每個日誌文件可以每天,每週,每月或當文件太大時進行處理。

通常,logrotate作為日常cron作業運行。除非該日誌的標準基於日誌的大小並且每天要多次運行logrotate,或者除非使用了-f或–force選項,否則它不會在一天內多次修改日誌。

命令行上可以提供任意數量的配置文件。較新的配置文件可能會覆蓋較早的文件中提供的選項,因此列出logrotate配置文件的順序 很重要。通常,應使用包含所需其他任何配置文件的單個配置文件。有關如何使用include指令完成此操作的更多信息,請參見下文。如果在命令行上給出了目錄,則該目錄中的每個文件都將用作配置文件。

如果未提供命令行參數,logrotate將打印版本和版權信息以及簡短的使用摘要。如果輪換日誌時發生任何錯誤,logrotate將以非零狀態退出。

Continue reading Linux下大檔案的log分割處理

Posted on 2 Comments

Linux刪除檔案後空間未釋放

查詢硬碟使用狀況

[root@localhost ~]# df

使用df可以查看硬碟的使用狀況

查詢刪除卻正在被使用的檔案

lsof(lsof的全稱是list open files),此工具可以用來查看正在運行中的進程打開了哪些文件、目錄和套接字;是系統監測工具之一。
請參見: 好用的網管指令-lsof

查找打開,但是不能連接的文件
一個進程打開一個文件, 然後將其設為 unlinked 狀態, 則此文件資源仍能被進程使用, 但是其訪問路徑已經被刪除了.
因此, 使用ls不能將其列出. 只有當進程結束時, 才能釋放文件佔用的資源

查找unlinked 文件, 選項 +L, 作用: 列出打開文件的連接數

[root@localhost ~]# lsof +L


指定連接數的上限

[root@localhost ~]# lsof +L1
Continue reading Linux刪除檔案後空間未釋放
Posted on

利用netstat查詢連線數量(connections)

參數說明

netstat -a
-a 指列出所有連接埠(Port)

netstat -at
-at 指僅列出 TCP 的連接埠
netstat -au
-au 指僅列出 UDP 的連接埠

不要解析 DNS

如果不想要讓 netstat 自動解析 DNS、連接埠名稱與使用者名稱的話,可以加上 -n 參數,這樣可以加速 netstat 的執行速度:
netstat -an
Continue reading 利用netstat查詢連線數量(connections)

Posted on

Linux 檢查硬碟使用量

檢查硬碟使用量 – df

輸入df指令
df

後面的mounted on指的是這個空間是掛載在那一個分割區

查詢某個分割區的硬碟使用狀況

df /dev
上面是查詢dev這個分割區的使用狀況

改變顯示的空間單位

預設的 df 輸出會以 KB 為單位顯示磁碟用量,但是現在的硬碟容量都很大,這樣的輸出較不好閱讀。
這時可以加上-h,來用適合閱讀的方式顯示資訊

僅顯示本機磁碟

使用
df -l

Posted on

nginx 基礎設定教學

安裝 nginx

使用以下指令安裝nginx

brew install nginx


完成之後就可使用 nginx

# 啟動 nginx
nginx
# 加上 -s option 來下指令
# 停止 nginx
nginx -s stop
# 重新讀取設定檔
nginx -s reload

若要設定為可以開機自動啟動,則把 nginx 啟動的 bash 檔放到 /etc/init.d/

設定nginx的設定檔

nginx 的設定檔名為 ngix.conf,設定檔所在的路徑可以透過 nginx -t來獲得

nginx的主要功能

  • 反向代理,實現簡單的負載均衡: 如果有多台服務器或者一台服務器多個端口,可以考慮用nginx。
  • 靜態資源緩存:把一些靜態資源(如靜態頁面,js等資源文件)放到nginx裡,可以極大的提高服務的性能。

反向代理

伺服器根據用戶端的請求,從其關聯的一組或多組後端伺服器(如Web伺服器)上取得資源,然後再將這些資源返回給用戶端,用戶端只會得知反向代理的IP位址,而不知道在代理伺服器後面的伺服器叢集的存在。

Posted on

使用pm2管理伺服器

pm2的操作

1. 安裝PM2
npm install pm2 -g
2. 啟動服務
pm2 start app.js
3. 啟動N個名為SERVICE_NAME的服務的進程
pm2 start app.js -i N --name SERVICE_NAME
4. 重啟服務
npm restart SERVICE_NAME
5. 設定記憶體使用超過多少後自動重啟伺服器
pm2 start app.js --max_memory_restart 1024M
6. 監控服務
pm2 monit

查看服務進程數

1. 查看物理CPU个数
cat /proc/cpuinfo| grep "physical id" | sort| uniq | wc -l

2. 查看每個物理CPU中的核數
cat /proc/cpuinfo| grep "cpu cores"| uniq

3. 查看邏輯CPU的個數
cat /proc/cpuinfo| grep "processor"| wc -l

確認是否使用nginx

nginx的主要功能如下

  • 反向代理,實現簡單的負載均衡: 如果有多台服務器或者一台服務器多個端口,可以考慮用nginx。
  • 靜態資源緩存:把一些靜態資源(如靜態頁面,js等資源文件)放到nginx裡,可以極大的提高服務的性能。

日誌問題

日誌系統對於任意應用而言,通常都是必不可少的一個輔助功能。pm2的相關文件默認存放於$HOME/.pm2/目錄下,其日誌主要有兩類:

  • pm2自身的日誌,存放於$HOME/.pm2/pm2.log;
  • pm2所管理的應用的日誌,存放於$HOME/.pm2/logs/目錄下,標準誰出日誌存放於${APP_NAME}_out.log,標準錯誤日誌存放於${APP_NAME}_error.log;

pm2支持配置文件啟動

pm2 ecosystem:生成配置文件ecosystem.json
pm2 startOrRestart /file/path/ecosystem.json :通過配置文件啟動服務

如下是開發時ecosystem.json的內容:

{ 
    apps : [
        { 
            name : "nova", 
            max_memory_restart: "300M", 
            script : "/root/nova/app.js", 
            out_file : "/logs/nova_out.log", 
            error_file : "/logs/nova_error.log", 
            instances : 4, 
            exec_mode : "cluster", 
            env: {
                NODE_ENV: "production"
            }
        }
    ]
}


採用cluster模式啟動了4個服務進程;如果服務佔用的內存超過300M,會自動進行重啟。


更多相關知識請見官網:ecosystem-file

支援自動化部署

一個簡單的process.json範例

{
   "apps" : [{
      "name" : "HTTP-API",
      "script" : "http.js"
   }],
   "deploy" : {
     // "production" is the environment name
     "production" : {
       "user" : "ubuntu",
       "host" : ["192.168.0.13"],
       "ref"  : "origin/master",
       "repo" : "git@github.com:Username/repository.git",
       "path" : "/var/www/my-repository",
       "post-deploy" : "npm install; grunt dist"
      },
   }
}


/bin/bash:

# Setup deployment at remote location
$ pm2 deploy production setup

# Update remote version
$ pm2 deploy production update

# Revert to -1 deployment
$ pm2 deploy production revert 1

# execute command on remote machines
$ pm2 deploy production exec "pm2 reload all"


更多介紹請見官網:simple-deploy