VPS HC
Trang Chủ / Blog / Task Scheduler — Tự động hóa tác vụ trên Windows VPS

Task Scheduler — Tự động hóa tác vụ trên Windows VPS

Tác giả
Nguyễn Chiến
Ngày đăng
15/06/2026
Lượt xem
44
Task Scheduler — Tự động hóa tác vụ trên Windows VPS

Task Scheduler (Lập lịch tác vụ) là công cụ có sẵn trong Windows, tương đương Crontab trên Linux. Dùng để tự động chạy script, backup, restart service theo lịch.

Mở Task Scheduler:

taskschd.msc

Hoặc: Win + R → gõ taskschd.msc → Enter

==== TẠO TASK QUA GIAO DIỆN ====

Bước 1: Tạo Basic Task

1. Bên phải → Create Basic Task

2. Đặt tên và mô tả → Next

3. Chọn trigger (khi nào chạy): Daily / Weekly / Monthly / One time / When computer starts / When I log on

4. Chọn Action: Start a program

5. Browse chọn file .exe hoặc .bat hoặc .ps1 cần chạy

6. Finish

Bước 2: Tạo Advanced Task

Dùng Create Task (không phải Basic Task) để có thêm tùy chọn:

  • Tab General: Tích "Run whether user is logged on or not" + "Run with highest privileges"
  • Tab Triggers: Thêm nhiều trigger, lặp mỗi X phút
  • Tab Actions: Chạy program/script
  • Tab Conditions: Chỉ chạy khi có nguồn điện, có mạng...
  • Tab Settings: Timeout, restart nếu fail

==== TẠO TASK BẰNG POWERSHELL ====

Chạy script mỗi ngày lúc 2 giờ sáng:

$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-File C:\scripts\backup.ps1"
$trigger = New-ScheduledTaskTrigger -Daily -At "02:00"
$settings = New-ScheduledTaskSettingsSet -RunOnlyIfNetworkAvailable -WakeToRun
Register-ScheduledTask -TaskName "DailyBackup" -Action $action -Trigger $trigger -Settings $settings -RunLevel Highest -Force
Write-Host "Task created!"

Chạy script mỗi 30 phút:

$action = New-ScheduledTaskAction -Execute "python.exe" -Argument "C:\scripts\monitor.py"
$trigger = New-ScheduledTaskTrigger -RepetitionInterval (New-TimeSpan -Minutes 30) -Once -At (Get-Date)
Register-ScheduledTask -TaskName "Monitor30Min" -Action $action -Trigger $trigger -RunLevel Highest -Force

Chạy khi Windows khởi động:

$action = New-ScheduledTaskAction -Execute "node.exe" -Argument "C:\myapp\index.js" -WorkingDirectory "C:\myapp"
$trigger = New-ScheduledTaskTrigger -AtStartup
Register-ScheduledTask -TaskName "StartNodeApp" -Action $action -Trigger $trigger -RunLevel Highest -User "SYSTEM" -Force

Chạy script .bat tự động backup:

Tạo file C:\scripts\backup.bat:

@echo off
set DATE=%date:~10,4%%date:~4,2%%date:~7,2%
xcopy "C:\inetpub\wwwroot" "D:\backup\web_%DATE%\" /E /I /Y
echo Backup done at %DATE% >> C:\scripts\backup.log

Đăng ký task:

$action = New-ScheduledTaskAction -Execute "C:\scripts\backup.bat"
$trigger = New-ScheduledTaskTrigger -Daily -At "03:00"
Register-ScheduledTask -TaskName "WebBackup" -Action $action -Trigger $trigger -RunLevel Highest -Force

Các lệnh quản lý Task Scheduler:

# Xem tất cả task
Get-ScheduledTask | Select-Object TaskName, State | Format-Table

# Chạy task ngay
Start-ScheduledTask -TaskName "DailyBackup"

# Dừng task đang chạy
Stop-ScheduledTask -TaskName "DailyBackup"

# Xóa task
Unregister-ScheduledTask -TaskName "DailyBackup" -Confirm:$false

# Bật/tắt task
Enable-ScheduledTask -TaskName "DailyBackup"
Disable-ScheduledTask -TaskName "DailyBackup"

# Xem lịch sử chạy
Get-ScheduledTaskInfo -TaskName "DailyBackup"

Dùng schtasks.exe (CMD truyền thống):

# Tạo task chạy hàng ngày
schtasks /create /tn "MyTask" /tr "C:\scripts\run.bat" /sc daily /st 02:00 /ru SYSTEM /f

# Xem task
schtasks /query /tn "MyTask" /fo LIST

# Chạy ngay
schtasks /run /tn "MyTask"

# Xóa task
schtasks /delete /tn "MyTask" /f

Ví dụ thực tế hay dùng:

  • Backup database MySQL mỗi đêm
  • Restart IIS mỗi tuần (tránh memory leak)
  • Chạy script dọn log cũ mỗi tháng
  • Kiểm tra và tự restart service nếu bị down
  • Chạy Windows Update vào giờ thấp điểm

Script tự động restart service nếu bị down:

# watchdog.ps1
$services = @("W3SVC", "MySQL57", "MSSQLSERVER")
foreach ($svc in $services) {
    $status = (Get-Service -Name $svc -ErrorAction SilentlyContinue).Status
    if ($status -ne "Running") {
        Start-Service -Name $svc
        Write-EventLog -LogName Application -Source "Watchdog" -EventId 1001 -Message "$svc was down, restarted at $(Get-Date)"
    }
}

Đăng ký chạy mỗi 5 phút:

$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-File C:\scripts\watchdog.ps1"
$trigger = New-ScheduledTaskTrigger -RepetitionInterval (New-TimeSpan -Minutes 5) -Once -At (Get-Date)
Register-ScheduledTask -TaskName "ServiceWatchdog" -Action $action -Trigger $trigger -RunLevel Highest -User "SYST
Có thể bạn cần xem thêm
Quay lại Blog
Bài viết đã được kiểm duyệt bởi VPS HC Team Cập nhật lần cuối: 15/06/2026

Bài Viết Liên Quan

Cần VPS tốc độ cao, giá hợp lý?

Khởi tạo trong vài phút · Hỗ trợ 24/7 · Uptime 99.99%

Dùng Thử Miễn Phí