(+84) 236.3827111 ex. 402

Unix/Linux: Auto Shutdown (2)


4. Tắt máy sau 30 phút nếu không có hoạt động bàn phím/chuột (GUI)

Dành cho hệ thống có giao diện đồ họa (x11):

xprintidle

(Một công cụ đo thời gian nhàn rỗi, đơn vị tính bằng milliseconds)

if [ $(xprintidle) -gt 1800000 ]; then

shutdown -h now

fi


5. Đây là một script hoàn chỉnh tự động tắt máy khi CPU thấp không có người dùng đăng nhập — thường dùng cho các server nhàn rỗi hoặc máy dùng tạm thời.

Mục tiêu:

  • Kiểm tra nếu không có ai đăng nhập

  • Kiểm tra nếu CPU rảnh > 95%

  • Nếu cả hai đúng → tắt máy

Script: auto_shutdown_idle.sh

#!/bin/bash


# --- Cấu hình ---

CPU_IDLE_THRESHOLD=95


# Kiểm tra số người đang đăng nhập (trừ user "root" nếu muốn)

users_logged_in=$(who | wc -l)


# Kiểm tra % CPU rảnh trung bình trong 1 giây (yêu cầu gói sysstat, dùng mpstat)

cpu_idle=$(mpstat 1 1 | awk '/Average:/ { print $12 }' | cut -d'.' -f1)


# Ghi log

echo "$(date): CPU idle: $cpu_idle%, người dùng: $users_logged_in" >> /var/log/auto_shutdown.log


# Điều kiện tắt máy

if [ "$users_logged_in" -eq 0 ] && [ "$cpu_idle" -ge "$CPU_IDLE_THRESHOLD" ]; then

echo "$(date): Thỏa điều kiện → Tắt máy!" >> /var/log/auto_shutdown.log

shutdown -h now

else

echo "$(date): Không thỏa điều kiện, không tắt." >> /var/log/auto_shutdown.log

fi

Cách cài đặt:

  1. Lưu file script:

sudo nano /usr/local/bin/auto_shutdown_idle.sh

→ Dán nội dung vào

  1. Cấp quyền chạy:

sudo chmod +x /usr/local/bin/auto_shutdown_idle.sh

  1. Tạo cron chạy mỗi 15 phút:

sudo crontab -e

→ Thêm dòng:

*/15 * * * * /usr/local/bin/auto_shutdown_idle.sh

Kiểm tra:

  • Cài sysstat nếu chưa có:

sudo apt install sysstat

  • Xem log tắt máy:

cat /var/log/auto_shutdown.log


6. Phiên bản nâng cao của script tắt máy tự động, đã thêm:

  1. Kiểm tra CPU rảnh

  2. Kiểm tra không có người dùng đăng nhập

  3. Kiểm tra pin yếu (<20%)

  4. Gửi email cảnh báo trước khi tắt

Yêu cầu hệ thống:

  • Cài sysstat (để dùng mpstat):

sudo apt install sysstat

  • Cài mailutils (để gửi email):

sudo apt install mailutils

  • Đảm bảo mail hoạt động với cấu hình SMTP hoặc sendmail/local mail.

Script: auto_shutdown_advanced.sh

#!/bin/bash


# --- Cấu hình ---

CPU_IDLE_THRESHOLD=95

BATTERY_THRESHOLD=20

EMAIL_TO="you@example.com" # ← Địa chỉ nhận cảnh báo

EMAIL_SUBJECT="CẢNH BáO: Máy tính sắp tắt do không hoạt động"

EMAIL_BODY="Hệ thống sẽ tự động tắt do không có người dùng, CPU rảnh và pin yếu."


LOGFILE="/var/log/auto_shutdown.log"


# --- Kiểm tra số người dùng đang đăng nhập ---

users_logged_in=$(who | wc -l)


# --- Kiểm tra CPU rảnh ---

cpu_idle=$(mpstat 1 1 | awk '/Average:/ { print $12 }' | cut -d'.' -f1)


# --- Kiểm tra phần trăm pin ---

battery_level=$(upower -i $(upower -e | grep battery) | grep percentage | awk '{print $2}' | tr -d '%')


# --- Ghi log ---

echo "$(date): CPU idle: $cpu_idle%, Users: $users_logged_in, Battery: ${battery_level}%" >> "$LOGFILE"


# --- Kiểm tra điều kiện ---

if [ "$users_logged_in" -eq 0 ] && [ "$cpu_idle" -ge "$CPU_IDLE_THRESHOLD" ] && [ "$battery_level" -le "$BATTERY_THRESHOLD" ]; then

echo "$(date): Gửi email cảnh báo đến $EMAIL_TO" >> "$LOGFILE"

echo "$EMAIL_BODY" | mail -s "$EMAIL_SUBJECT" "$EMAIL_TO"


echo "$(date): Thỏa điều kiện — TẮT MáY" >> "$LOGFILE"

shutdown -h now

else

echo "$(date): Không thỏa điều kiện, không tắt máy." >> "$LOGFILE"

fi


Thiết lập chạy định kỳ:

sudo chmod +x /usr/local/bin/auto_shutdown_advanced.sh

sudo crontab -e

→ Thêm dòng cron:

*/15 * * * * /usr/local/bin/auto_shutdown_advanced.sh