脚本如何标记任务完成状态

wen 实用脚本 28

本文目录导读:

脚本如何标记任务完成状态

  1. 命令行/Terminal 脚本(Bash/PowerShell)
  2. 编程语言脚本
  3. 系统级方法
  4. CI/CD 脚本 (GitLab CI / Jenkins)
  5. 数据库/存储标记
  6. 图形界面脚本(AutoHotkey, AppleScript)
  7. 工作流管理工具
  8. 最佳实践建议

脚本标记任务完成状态的方法取决于你使用的具体环境(如操作系统、编程语言、项目管理系统等),以下是几种常见场景的实现方式:

命令行/Terminal 脚本(Bash/PowerShell)

Bash 脚本

#!/bin/bash
# 使用退出码标记状态
task_run() {
    # 执行任务逻辑
    if [ $? -eq 0 ]; then
        echo "TASK_COMPLETED"
        return 0
    else
        echo "TASK_FAILED"
        return 1
    fi
}
# 记录到日志文件
echo "$(date): Task completed" >> /var/log/tasks.log

PowerShell 脚本

# 使用 Write-Progress 或自定义状态
$taskResult = @{
    Status = "Completed"
    Timestamp = Get-Date
    TaskName = "DataProcessing"
}
$taskResult | ConvertTo-Json | Out-File -Path "task_status.json"

编程语言脚本

Python 脚本

# 使用状态枚举
from enum import Enum
import json
class TaskStatus(Enum):
    PENDING = "pending"
    IN_PROGRESS = "in_progress"
    COMPLETED = "completed"
    FAILED = "failed"
def mark_task_completed(task_id):
    status = {
        "id": task_id,
        "status": TaskStatus.COMPLETED.value,
        "completed_at": datetime.now().isoformat()
    }
    # 保存到文件或数据库
    with open("tasks_status.json", "w") as f:
        json.dump(status, f)
mark_task_completed("task_001")

JavaScript (Node.js) 脚本

const fs = require('fs');
// 标记任务完成
function markTaskCompleted(taskId) {
    const status = {
        taskId,
        status: 'completed',
        timestamp: new Date().toISOString()
    };
    fs.writeFileSync(`task_${taskId}_status.json`, JSON.stringify(status));
}

系统级方法

文件标记法

# 创建状态文件
touch /tmp/task_completed_$(date +%s).flag
# 检查状态
if [ -f /tmp/task_completed*.flag ]; then
    echo "任务已完成"
fi

环境变量标记

# 设置环境变量
export TASK_STATUS="completed"
# 子进程检查
if [ "$TASK_STATUS" = "completed" ]; then
    echo "继续执行后续任务"
fi

CI/CD 脚本 (GitLab CI / Jenkins)

GitLab CI

job:
  script:
    - echo "Running task..."
    - # 任务逻辑
    - echo "TASK_COMPLETED" > status.txt
  artifacts:
    paths:
      - status.txt

Jenkins Pipeline

pipeline {
    stages {
        stage('Task') {
            steps {
                script {
                    try {
                        sh 'run_task.sh'
                        currentBuild.result = 'SUCCESS'
                    } catch (Exception e) {
                        currentBuild.result = 'FAILURE'
                    }
                }
            }
        }
    }
}

数据库/存储标记

SQLite 示例

sqlite3 tasks.db "UPDATE tasks SET status='completed', completed_at=datetime('now') WHERE id=1;"

Redis 标记

redis-cli SET task:status:001 completed
redis-cli EXPIRE task:status:001 86400  # 24小时后过期

图形界面脚本(AutoHotkey, AppleScript)

AutoHotkey (Windows)

; 创建任务完成标记
FileAppend, Task completed at %A_Now%`n, C:\Tasks\status.log
; 更新注册表
RegWrite, REG_SZ, HKEY_CURRENT_USER\Software\MyApp\Tasks, Task001, Completed

AppleScript (macOS)

-- 创建状态文件
do shell script "echo 'completed' > /tmp/task_status.txt"
-- 通知中心
display notification "任务已完成" with title "任务状态"

工作流管理工具

Makefile

.PHONY: task
task:
    @echo "执行任务..."
    @touch $@.completed  # 标记完成
task.completed: task
    @echo "任务已在 $< 中完成"
注意清理:
clean:
    rm -f *.completed

最佳实践建议

  1. 持久化标记:使用文件、数据库或状态服务,而不是仅依赖内存
  2. 原子性操作:避免并发写入导致状态混乱(使用文件锁或数据库事务)
  3. 状态可追溯:记录时间戳、任务ID、执行环境等信息
  4. 错误处理:标记失败状态时记录错误原因
  5. 幂等性:重复标记操作不应产生副作用

选择哪种方法取决于:

  • 任务的复杂度和持久性需求
  • 是否需要跨系统/跨网络共享状态
  • 是否要求实时监控和通知

如果有具体的脚本环境或使用场景,可以提供更精确的实现方案!

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