脚本如何创建多组闹钟任务

wen 实用脚本 28

本文目录导读:

脚本如何创建多组闹钟任务

  1. Linux/macOS 使用 cron 定时任务
  2. Windows 使用 PowerShell + Task Scheduler
  3. Python 跨平台方案
  4. JavaScript/Node.js 方案
  5. 配置文件管理闹钟
  6. 手机端方案

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 + 脚本读取

建议从简单的方案开始,根据实际需求逐步增加功能。

抱歉,评论功能暂时关闭!