01-linux创建定时任务

在linux下创建定时任务通常使用cron(command run on table可以这么记)服务 cron是一个基于时间的任务调度程序,可以在特定时间或周期性地执行任务 以下是创建定时器任务的步骤:

1.编辑crontab任务

使用crontab命令来编辑当前用户的定时任务列表:

cronble -e

2.添加定时任务

在cronble文件中,每一行代表一个定时任务 定时任务的格式如下:

* * * * * command

分钟(0-59)

小时(0-23)

日期(1-31)

月份(1-12)

星期几(0~7, 0和7都表示星期天)

例如,每天凌晨2点执行一个脚本 /path/to/script.sh :

0 2 * * * /path/to/script.sh

3.保存并退出

编辑完成后,保存并退出编辑器 cronble会自动加载新的定时任务

 4.查看当前用户的定时任务

可以使用以下命令查看当前用户的定时任务列表:

cronble -l

 5.删除定时任务

要删除所有定时任务,可以使用以下命令:

cronble -r

示例

假设你想每隔5分钟执行一次 /path/to/another_script.sh,可以在cronble文件中添加以下行:

*/5 * * * * /path/to/another_script.sh

 

注意事项:

路径命令:确保命令或脚本的路径是正确的

权限:确保脚本有执行权限,可以使用chmod + x/path/to/script.sh来赋予执行权限

日志记录:为了调试和记录,可以将输出重定向到日志文件 例如:

0 2 * * * /path/to/script.sh >> /path/to/logfile.txt 2>&1

这样可以帮助你在linux下创建和管理定时任务

 

以下是一个实例:

cronble -e

36 17 * * * ~/schedule_task/schedule_clone_code.sh >> ~/schedule_task/logfile1.txt

*/1 * * * * ~/schedule_task/schedule_clone_code.sh >> ~/schedule_task/logfile2.txt

#!/bin/bash

# 判断文件大小
log_path=$(eval echo "~/schedule_tasks") # 用于将~展开为当前用户的主目录
log_file="$log_path/logffile.log"
log_file_bak="$log_path/backup_$(date +%Y%m%d_%H%M%S).log"

# 检查文件是否存在
if [ -f "$log_file" ]; then
    file_size=$(stat -c%s "$log_file") # 获取文件大小(单位:字节)
    if [ $file_size -gt 1048576 ]; then # 判断文件是否大于1MB (1048576字节)
        cp "$log_file" "$log_file_bak" # 备份文件
        > "$log_file" # 清空原文件
        echo "原文件备份为$log_file_bak"
        echo "原文件已清空"
    else
        echo "文件小于1MB,无需备份"
    fi
else
    echo "文件不存在'$log_file'"
fi

function xxx_chp() {
    repo sync repo1 -j32
    repo sync repo2 -j32
    repo sync repo3 -j32
}

function xxx_sys() {
    repo sync repo1 -j32
    repo sync repo2 -j32
    repo sync repo3 -j32
}

function xxx_master() {
    cd $PWD/$1
    if [ ! -e /.repo ]; then
        $2
    fi
    $3
    cd ..
}

function undate_code()
{
    bak=$pwd
    if [ ! -d "$1" ]; then
        mkdir -p "$1"
        echo "文件夹 '$1' 不存在,已创建"
    fi
    cd $1
    
    if [ -d .repo ]; then
        echo .repo not exist need repo init
        $2
    else
        echo .repo exist no need init
    fi
    
    echo current path: $pwd
    repo sync -j32
    cd $bak
    echo code sync "$1" ok; echo
}

proj_name_master_chp="proj_name master chip repo init command"
proj_name_master_sys="proj_name master system repo init command"

function xxx_update_code() {
    xxx_master master_chp "$proj_name_master_chp" xxx_chp
    xxx_master master_sys "$proj_name_master_sys" xxx_sys
}

function auto_code() {
    undate_code $(eval echo "~/code/manu_chp_$(date +%m%d)") $proj_name_master_chp
    undate_code $(eval echo "~/code/manu_sys_$(date +%m%d)") $proj_name_master_sys
}

xxx_update_code
auto_code

echo $(date +%Y%m%d_%H%M%S) script execute ok

 

posted @ 2025-09-07 17:02  乐观的知觉  阅读(67)  评论(0)    收藏  举报