本文目录导读:

- Linux/macOS 使用
cron定时任务 - Windows 使用 PowerShell + Task Scheduler
- Python 跨平台方案
- JavaScript/Node.js 方案
- 配置文件管理闹钟
- 手机端方案
Linux/macOS 使用 cron 定时任务
基础语法
# 格式:分钟 小时 日 月 星期 命令 # 每天 8:00 执行 0 8 * * * /path/to/script.sh # 每天 12:30 和 18:30 执行 30 12,18 * * * /path/to/script.sh # 工作日 9:00 和 13:00 0 9,13 * * 1-5 /path/to/script.sh
创建多组闹钟示例
# 编辑 crontab crontab -e # 添加多个闹钟任务 # 早上 7:00 起床闹钟 0 7 * * * /usr/bin/mpg123 /path/to/alarm.mp3 # 中午 12:00 午餐提醒 0 12 * * * notify-send "午餐时间" "该吃午饭了" # 下午 15:00 休息提醒 0 15 * * * notify-send "休息时间" "起来活动一下" # 晚上 22:00 睡觉提醒 0 22 * * * /home/user/scripts/sleep_reminder.sh
Windows 使用 PowerShell + Task Scheduler
PowerShell 脚本创建多个闹钟
# Schedule-Alarms.ps1
function New-Alarm {
param(
[string]$Time,
[string]$Name,
[string]$Message
)
$action = New-ScheduledTaskAction -Execute "powershell.exe" `
-Argument "-WindowStyle Hidden -Command `"Write-Host '$Message'; [System.Media.SystemSounds]::Asterisk.Play(); Start-Sleep 5`""
$trigger = New-ScheduledTaskTrigger -Daily -At $Time
Register-ScheduledTask -TaskName "Alarm_$Name" -Action $action -Trigger $trigger -Force
}
# 创建多组闹钟
New-Alarm -Time "07:00" -Name "WakeUp" -Message "起床时间到了!"
New-Alarm -Time "12:00" -Name "Lunch" -Message "午餐时间,休息一下"
New-Alarm -Time "15:00" -Name "Break" -Message "休息15分钟"
New-Alarm -Time "22:00" -Name "Sleep" -Message "准备睡觉"
Python 跨平台方案
使用 schedule 库
import schedule
import time
from datetime import datetime
import subprocess
def alarm_1():
print(f"[{datetime.now()}] 闹钟1:起床时间!")
subprocess.run(['notify-send', '起床闹钟', '新的一天开始了'])
def alarm_2():
print(f"[{datetime.now()}] 闹钟2:午餐时间")
subprocess.run(['notify-send', '午餐提醒', '该吃午饭了'])
def alarm_3():
print(f"[{datetime.now()}] 闹钟3:休息时间")
subprocess.run(['notify-send', '休息提醒', '起来活动一下'])
# 设置多组闹钟
schedule.every().day.at("07:00").do(alarm_1)
schedule.every().day.at("12:00").do(alarm_2)
schedule.every().day.at("15:00").do(alarm_3)
# 也可以设置工作日闹钟
# schedule.every().monday.at("08:00").do(alarm_1)
# schedule.every().wednesday.at("18:30").do(alarm_2)
while True:
schedule.run_pending()
time.sleep(1)
使用 apscheduler 高级调度
from apscheduler.schedulers.blocking import BlockingScheduler
from apscheduler.triggers.cron import CronTrigger
from datetime import datetime
scheduler = BlockingScheduler()
def alarm_task(name):
print(f"[{datetime.now()}] {name} 闹钟触发!")
# 添加多个闹钟
scheduler.add_job(
alarm_task,
CronTrigger(hour=7, minute=0),
args=['起床'] # 传递参数
)
scheduler.add_job(
alarm_task,
CronTrigger(hour=12, minute=30, day_of_week='mon-fri'), # 工作日中午
args=['午餐']
)
scheduler.add_job(
alarm_task,
CronTrigger(hour=22, minute=0),
args=['睡觉']
)
try:
scheduler.start()
except KeyboardInterrupt:
print("闹钟系统已停止")
JavaScript/Node.js 方案
使用 node-schedule 库
const schedule = require('node-schedule');
const notifier = require('node-notifier');
const path = require('path');
// 闹钟函数
function createAlarm(name, time, message) {
return schedule.scheduleJob(time, function() {
console.log(`${new Date().toLocaleString()} - ${name}: ${message}`);
// 桌面通知
notifier.notify({
title: `⏰ ${name}`,
message: message,
icon: path.join(__dirname, 'alarm-icon.png'),
sound: true,
wait: true
});
});
}
// 创建多组闹钟
const alarms = [
createAlarm('起床', '0 7 * * *', '新的一天开始了!'),
createAlarm('午餐', '0 12 * * 1-5', '记得吃午饭'),
createAlarm('休息', '0 15 * * 1-5', '来杯咖啡休息一下'),
createAlarm('下班', '0 18 * * 1-5', '下班时间到了'),
createAlarm('睡觉', '0 23 * * *', '该睡觉了,晚安')
];
console.log('多组闹钟已启动,共', alarms.length, '个闹钟');
// 列出所有闹钟
console.log('\n闹钟列表:');
schedule.scheduledJobs.forEach((job, name) => {
console.log(`- ${name}: ${job.nextInvocation()}`);
});
配置文件管理闹钟
YAML 配置文件 (alarms.yaml)
alarms:
- name: "早起"
time: "07:00"
days: "all" # all, weekdays, weekends
message: "起床时间到了"
sound: "gentle.mp3"
- name: "午餐"
time: "12:00"
days: "weekdays"
message: "午餐时间"
sound: "lunch.mp3"
- name: "会议"
time: "14:30"
days: "mon,wed,fri"
message: "团队会议"
sound: "meeting.mp3"
Python 读取配置
import yaml
from datetime import datetime
import schedule
import time
class AlarmManager:
def __init__(self, config_file):
with open(config_file, 'r') as f:
self.config = yaml.safe_load(f)
def setup_alarms(self):
for alarm in self.config['alarms']:
self.schedule_alarm(alarm)
def schedule_alarm(self, alarm_config):
time_str = alarm_config['time']
# 处理不同的日期设置
if alarm_config['days'] == 'all':
schedule.every().day.at(time_str).do(self.trigger_alarm, alarm_config)
elif alarm_config['days'] == 'weekdays':
schedule.every().monday.at(time_str).do(self.trigger_alarm, alarm_config)
schedule.every().tuesday.at(time_str).do(self.trigger_alarm, alarm_config)
# ... 其他工作日
def trigger_alarm(self, config):
print(f"[{datetime.now()}] {config['name']}: {config['message']}")
# 触发声音通知
if __name__ == "__main__":
manager = AlarmManager('alarms.yaml')
manager.setup_alarms()
while True:
schedule.run_pending()
time.sleep(1)
手机端方案
Android Termux + Python
# 安装 Termux 后
pkg install python
pip install schedule
# alarm.py
import schedule
import time
import subprocess
def alarm_with_vibrate():
subprocess.run(['termux-vibrate', '-d', '1000'])
subprocess.run(['termux-tts-speak', '闹钟响了!'])
schedule.every().day.at("07:00").do(alarm_with_vibrate)
schedule.every().day.at("12:00").do(alarm_with_vibrate)
while True:
schedule.run_pending()
time.sleep(1)
选择哪种方案取决于你的需求:
- 服务器/系统级:cron (Linux) 或 Task Scheduler (Windows)
- 跨平台脚本:Python + schedule 或 apscheduler
- Web 应用:Node.js + node-schedule
- 手机端:Termux + Python
- 需要配置文件:使用 YAML/CONFIG + 脚本读取
建议从简单的方案开始,根据实际需求逐步增加功能。