Menu

Showing posts with label system. Show all posts
Showing posts with label system. Show all posts

Friday, January 15, 2021

[System - Linux] วิธีการ Monitor การใช้งาน CPU หน่วยความจำและพื้นที่ว่างของฮาร์ดดิสก์แบบ Real Time
[System - Linux] How to Monitor CPU, Memory and Disk Space in Real Time

การ Monitor CPU และ RAM

เราจะใช้ htop 

เมื่อเราติดตั้ง htop เรียบร้อยแล้ว เราสามารถ monitor CPU และ RAM โดยรันคำสั่งดังนี้

htop

การ Monitor พื้นที่ว่างของ Harddisk 

เราจะใช้คำสั่งดังนี้

watch --interval=60 df --human-readable /dev/sda1

โดยที่ /dev/sda1 เป็น partition ที่ต้องการ monitor


หมายเหตุ เราสามารถดูรายการ partition ทั้งหมดได้ โดยใช้คำสั่งดังนี้

sudo lsblk

โดยชื่อ partition จะต้องใส่ /dev/ นำหน้า เช่น /dev/xvda1 ตามชื่อในรูป

[System - Linux] วิธีการตรวจสอบพื้นที่ของดิสก์ ขนาดของแฟ้มข้อมูลและไฟล์
[System - Linux] How to Check Disk Space, Folder Size and File Size

วิธีการตรวจสอบพื้นที่ของดิสก์ เราจะใช้คำสั่งดังนี้
df -h

วิธีการตรวจสอบขนาดของแฟ้มข้อมูล เราจะใช้คำสั่งดังนี้
du -h

วิธีการตรวจสอบขนาดของไฟล์ เราจะใช้คำสั่งดังนี้
ls -la

[System - Linux] วิธีการตรวจสอบข้อมูล Log ของ Cron บน Linux Server แต่ละประเภท
[System - Linux] How to Find Cron Logs on Each Type of Linux Server

Ubuntu และ Debian

ข้อมูล log ของ cron จะถูกรวมอยู่ใน /var/log/syslog 

วิธีการตรวจสอบ log ให้ใช้คำสั่งดังนี้

grep CRON /var/log/syslog

CentOS and Redhat

ข้อมูล log ของ cron จะแยกไว้ที่ /var/log/cron 

วิธีการตรวจสอบ log ให้ใช้คำสั่งดังนี้

tail /var/log/cron

Friday, January 17, 2020

[System] การตั้งค่า Crontab เพื่อรันภายใต้ผู้ใช้งานที่ระบุ
[System] How to Run Crontab with Specific User

ในบางครั้งเราต้องการรัน cron ภายใต้ผู้ใช้งานที่เราระบุ ยกตัวอย่าง เช่น การรัน schedule ของ Laravel การไม่ระบุผู้ใช้งาน อาจจะทำให้เกิดปัญหาขึ้นได้ (อ่านเพิ่มได้ที่ [Laravel - Scheduler] ระวัง!!! การไม่กำหนด username ใน Cron Entry สามารถทำให้เกิด "Permission Denied" ได้)

การระบุผู้ใช้งานที่รัน cron สามารถระบุได้ 2 แบบดังนี้
  1. การตั้งค่า cron ในไฟล์ /etc/crontab หรือไฟล์ใน /etc/cron.d/ สามารถเพิ่ม cron entry ที่มี username ได้เลย ดังนี้
  2. * * * * * username /path/to/your/script.sh
    
  3. การตั้งค่า cron ภายใต้ user ที่ต้องการ สามารถรันคำสั่งดังนี้ 
  4. sudo crontab -u username -e
    
    หลังจากนั้น เพิ่ม cron entry ดังนี้
    * * * * * /path/to/your/script.sh
    
หมายเหตุ ไม่สามารถใช้ crontab entry แบบที่ 1 เพิ่มลงในการตั้งค่า cron แบบที่ 2 เนื่องจาก /path/to/your/script.sh จะไม่ถูกรัน

Wednesday, December 18, 2019

[Docker] การใช้ Docker สำหรับทำ Host เว็บไซต์หลายเว็บบน server เครื่องเดียว
[Docker] How to Use Docker to Host Multiple Websites in One Server

การใช้ Server เพียงเครื่องเดียวในการ host หลายเว็บไซต์ เราจำเป็นต้องใช้ Reverse Proxy

ในที่นี้เราจะใช้ NGINX Proxy ในการจัดการ Proxy ให้เรา โดยมีวิธีการติดตั้งดังนี้
  1. สร้าง docker network
  2. docker network create nginx-proxy
    
  3. สร้างไฟล์ docker-compose.yml โดยใช้ไฟล์ตั้งต้นจาก https://github.com/jwilder/nginx-proxy/blob/master/docker-compose.yml
  4. เพิ่ม code ข้างล่าง ใน docker-compose.yml ของ nginx-proxy
  5. networks:
      default:
        external:
          name: nginx-proxy
    
  6. รัน nginx-proxy ด้วยคำสั่งดังนี้
  7. docker-compose up -d
    

Thursday, October 3, 2019

[Ubuntu] วิธีการหาชื่อ Operating System และ Version ของ Linux ผ่านทาง Terminal
[Ubuntu] How to Find Name and Version of Operating System in Linux Terminal

เราสามารถใช้คำสั่งต่อไปนี้ในการหาชื่อ Operating System และ Version ใน Linux
cat /etc/os-release
lsb_release -a
hostnamectl

Thursday, August 8, 2019

[Laravel - Scheduler] การใช้ Environment Variable ของระบบปฏิบัติการใน Laravel Scheduler
[Laravel - Scheduler] How to Use Environment Variable of Operating System in Laravel Scheduler

Laravel scheduler ใช้ Crontab ในการรันคำสั่งต่างๆตามเวลาที่กำหนดบน Linux

เมื่อเราต้องการใช้งาน Laravel scheduler เราเพียงเพิ่มการตั้งค่าตามด้านล่างนี้ใน Cron ของ server
* * * * * php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
สำหรับการใช้ Environment Variable ของระบบปฏิบัติการ เราจำเป็นต้องสร้าง shell script ขึ้นมาตัวนึง เพื่อ export ตัวแปรที่เราต้องการใช้ก่อน

Saturday, August 3, 2019

[PHP] วิธีการพิมพ์ข้อความออกทาง STDOUT หรือ STDERR หรือ SYSLOG
[PHP] How to Print Out Message to STDOUT or STDERR or SYSLOG

ในบางครั้งคุณมีความจำเป็นต้องพิมพ์ข้อความออกทาง system log หรือ I/O streams อื่นๆ เช่น standard output, standard error

สมมติว่า $str เป็นข้อความที่คุณต้องการ print

คุณสามารถใช้ method ข้างล่างสำหรับการพิมพ์ข้อความออก system log
syslog(LOG_INFO, $str);
อ่านข้อมูลเพิ่มเติมที่ https://www.php.net/manual/en/function.syslog.php

คุณสามารถใช้ method ข้างล่างสำหรับการพิมพ์ข้อความออก I/O streams อื่นๆ
$out = fopen('php://stdout', 'w'); //output handler
fputs($out, $str); //writing output operation
fclose($out); //closing handler
โดยที่ php://stdout สามารถแทนด้วย php://stderr หรือ php://output
อ่านข้อมูลเพิ่มเติมที่ https://www.php.net/manual/en/wrappers.php.php

Thursday, May 16, 2019

[ELK - Logstash] วิธีการ parse ข้อความ Log ที่มีหลายรูปแบบ โดยใช้ GROK
[ELK - Logstash] How to Parse Multiple Log Message by Using GROK

สำหรับการ parse ข้อความโดย GROK คุณต้องเพิ่ม grok filter ตามตัวอย่างด้านล่าง (อ้างอิงจาก https://www.elastic.co/guide/en/logstash/2.1/plugins-filters-grok.html#plugins-filters-grok-match)

สำหรับรายละเอียดของ GROK patterns อ่านได้ที่ https://github.com/elastic/logstash/blob/v1.4.0/patterns/grok-patterns

คุณสามารถทดสอบ pattern ที่คุณสร้างขึ้นกับข้อความจริง ได้ที่ https://grokdebug.herokuapp.com/

Tuesday, April 23, 2019

[ELK - Filebeat] การติดตั้งและตั้งค่า Filebeat บน Ubuntu เพื่อเก็บ log ใน Logstash
[ELK - Filebeat] How to Install and Configure Filebeat on Ubuntu for Storing Log in Logstash

การติดตั้ง Filebeat สามารถทำได้โดยรันคำสั่งดังนี้
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.6.2-amd64.deb
dpkg -i filebeat-6.6.2-amd64.deb
Path ของ Filebeat ที่ควรรู้มีดังนี้
config path/etc/filebeat
log path /var/log/filebeat

กรณีใช้ Filebeat ยิง log ไปที่ Logstash จำเป็นจะต้อง load template ไปที่ elasticsearch แบบ manual โดยใช้คำสั่งดังนี้
filebeat setup --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'

Wednesday, April 17, 2019

[Ubuntu] วิธีการเพิ่มหรือแก้ไขผู้ใช้งานบน Ubuntu
[Ubuntu] How to Add and Modify User on Ubuntu

คำสั่งสำหรับเพิ่ม account ผู้ใช้งานใหม่
adduser <username>
คำสั่งสำหรับเพิ่มผู้ใช้งานของคุณเข้ากลุ่ม sudo เพื่ออนุญาตให้ผู้ใช้งานคนนั้นรันคำสั่งด้วย administrative privileges ได้ โดยใส่ sudo นำหน้า
usermod -aG sudo <username>
คำสั่งสำหรับสลับเป็นผู้ใช้งานอื่นชั่วคราว ในขณะที่ผู้ใช้งานเป็น root
su - <username>
คำสั่งสำหรับเปลี่ยนรหัสผ่านผู้ใช้งานของคุณ
passwd <username>
คำสั่งสำหรับตรวจสอบผู้ใช้งานปัจจุบัน
whoami

Sunday, March 31, 2019

[AWS] การติดตั้ง ELK อย่างง่ายบน AWS
[AWS] How to Install ELK on AWS

ELK stack เป็น platform สำหรับการจัดการ log ซึ่งประกอบไปด้วย 3 ส่วน คือ
  1. Elasticsearch (deep search and data analytics)
  2. Logstash (centralized logging and parsing)
  3. Kibana (powerful data visualizations)

การติดตั้งเริ่มต้นโดยเข้าไปที่ ELK Certified by Bitnami แล้วทำการ subscribe และทำตามขั้นตอนไปจนจบ ก็จะได้ Instance ที่มี ELK stack มาใช้งาน

Friday, March 29, 2019

[Docker] การติดตั้ง Docker และ Docker Compose บน Ubuntu
[Docker] How to Install Docker and Docker Compose on Ubuntu

ถ้าหากเครื่อง server ยังไม่ได้ติดตั้ง curl ให้ติดตั้ง curl ก่อน โดยใช้คำสั่งดังนี้
sudo apt-get install curl
หลังจากนั้นให้ติดตั้ง Docker โดยใช้คำสั่งดังนี้
sudo curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
สำหรับการทดสอบ เมื่อติดตั้ง Docker สำเร็จแล้ว ให้รันคำสั่งดังนี้
docker run hello-world
จะได้ผลลัพธ์ดังรูป


หลังจากนั้นให้ติดตั้ง Docker Compose โดยใช้คำสั่งดังนี้ 
sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
สำหรับการทดสอบ เมื่อติดตั้ง Docker Compose สำเร็จแล้ว ให้รันคำสั่งดังนี้
docker-compose -v
จะได้ผลลัพธ์ดังรูป


Tuesday, February 5, 2019

[Server - Ubuntu] การสร้างหรือต่ออายุ Let's Encrypt Certificate สำหรับ Website
[Server - Ubuntu] How to Create or Renew Let's Encrypt Certificate for Website

สมมติว่า ได้ลง certbot ไว้ในเครื่อง server เรียบร้อยแล้ว
  1. รันคำสั่ง sudo certbot certonly -d {domain_name}
  2. เลือก option ที่ 2 เพื่อใช้วิธีการระบุ path ของ public folder ของเว็บแทนการสร้าง standalone web server ขึ้นมา
  3. ใส่ path ของ public folder แล้วกด enter 
ไฟล์ certificates ที่ถูกสร้างใหม่ จะอยู่ใน folder /etc/letsencrypt/live/{domain_name} ซึ่งเราสามารถนำไฟล์นี้ไปแทนที่ไฟล์ certificates เดิมที่กำลังจะหมดอายุได้เลย

Saturday, May 26, 2018

[Ubuntu] การแตกไฟล์ zip ด้วย encoding ที่กำหนด
[Ubuntu] How to Extract ZIP File with Specific Encoding

หลังจากที่บีบอัดไฟล์ที่มีชื่อภาษาไทยเป็นไฟล์ zip บน Windows แล้วนำมาแตกไฟล์บน Ubuntu เพื่อใช้งาน จะพบว่า ชื่อไฟล์ที่เป็นอักขระภาษาไทยถูกแทนที่ด้วยอักระพิเศษที่อ่านไม่รู้เรื่อง

สาเหตุที่เป็นเช่นนั้น เนื่องจากการแตกไฟล์ปกติจะใช้ default encoding ซึ่งไม่ใช่ encoding สำหรับภาษาไทย ดังนั้นเราจึงต้องกำหนด encoding ที่จะใช้ในการแตกไฟล์ดังนี้
unzip -O <encoding> <filename> -d <target_dir>
ตัวอย่างเช่น
unzip -O windows-874 lp-real-font.zip -d ocr_in
สำหรับชื่อ encoding ที่ใช้ได้ สามารถดูได้จาก https://www.iana.org/assignments/character-sets/character-sets.xhtml

Ref: https://superuser.com/questions/872596/decompress-zip-with-given-encoding

Saturday, March 17, 2018

[Docker] การเปลี่ยนแปลงวันเวลาของเครื่อง Server ที่เป็น Docker
[Docker] How to Change Date and Time of Server which is Docker

การเปลี่ยนแปลงวันเวลาของเครื่อง Server ที่เป็น Docker นั้น เราไม่สามารถใช้คำสั่ง docker exec เพื่อเข้าไปเปลี่ยนแปลงวันเวลาของเครื่องได้โดยตรง เนื่องจากวันเวลาของเครื่องที่เป็น Docker นั้นจะใช้วันเวลาจากเครื่อง Host เป็นหลัก ดังนั้นการจะเปลี่ยนแปลงวันเวลาของเครื่อง Docker จะต้องเปลี่ยนแปลงเวลาที่เครื่อง Host แทน

คำสั่งในการเปลี่ยนแปลงวันเวลาของเครื่อง Host ที่เป็น Linux คือ
date -s "2018-04-01 00:00:00"
ซึ่งถ้าต้องการเปลี่ยนแปลงวันเวลากลับไปเป็นวันเวลาของเครื่องจริงๆก็สามารถใช้คำสั่งดังนี้
hwclock > date -s

Friday, October 25, 2013

[FFmpeg] วิธีการติดตั้ง FFmpeg สำหรับ Windows 7
[FFmpeg] How to Install FFmpeg for Windows 7

ขั้นแรก ดาวน์โหลด FFmpeg จาก http://ffmpeg.zeranoe.com/builds/
First, download FFmpeg from http://ffmpeg.zeranoe.com/builds/ 

แตกไฟล์ที่ดาวน์โหลดมาด้วย 7-zip ไว้ที่ C:/
Extract downloaded file with 7-zip to C:/

เปลี่ยนชื่อแฟ้มที่ได้จากการแตกไฟล์เป็น ffmpeg
Rename extracted folder to ffmpeg


Tuesday, October 22, 2013

[VirtualBox] วิธีแก้ไขปัญหา "Attempting to load 64 bit however this CPU is not compatible with 64 bit mode" สำหรับการลง Window 7 64 bit
[VirtualBox] How to Fix Problem: "Attempting to load 64 bit however this CPU is not compatible with 64 bit mode" on Window 7 64 bit Installation

ปัญหานี้จะแสดงดังภาพด้านล่างหลังจากพยายามลง Window 7 64 bit
This problem is shown as image below after attempting to install Window 7 64 bit


การแก้ข้อผิดพลาด คือ เข้าไป enable virtualization ใน BIOS
To fix error, enable virtualization setting inside BIOS

Sunday, June 2, 2013

[System] วิธีการจัดการพาร์ทิชั่นบน Windows 7
[System] How to Manage Partition on Windows 7

ดาวน์โหลด Partition Assistant จาก http://www.disk-partition.com/download-home.html
Download Partition Assistant from http://www.disk-partition.com/download-home.html


ในกรณีนี้ ผมเลือก AOMEI Partition Assistant Standard 5.2 (PA Standard)
In this case, I select AOMEI Partition Assistant Standard 5.2 (PA Standard)