【Linux】如何在Linux服务器上设置一个定时任务

部署运行你感兴趣的模型镜像

如何在Linux服务器上设置一个定时任务

1. 背景

这个需求是生产环境上实际遇到的。我们有一台服务器专门用来接收其它平台推送过来的业务数据,而且每天推送的数据都是全量的。数据按天分开,每天的数据量大概10个G。时间就来,数据越来越多,磁盘有占满风险,磁盘一旦满了,数据平台推送数据会失败,会影响我们的业务处理。
因此,我利用Linux的 crontab 写了一个定时任务请求处理多余数据,仅保留最近10天的数据。

2. crontab 上添加定时任务

查看当前Linux 服务器上已有的定时任务:
crontab -l

在Linux服务器上 编辑/添加 定时任务:
crontab -e
执行该命令,会进入crontab 定时任务列表编辑的 vim 界面,添加上如下一行:
30 19 * * * /data/sftp/upload/clear_script.sh
表示在每天晚上19:30 定时执行/data/sftp/upload 目录下的名为 clear_script.sh 的脚本。
下面开始写具体的脚本内容。

3. 编写定时任务脚本

这个清理脚本主要分为2个部分,一个是shell脚本部分,一个是Python脚本部分。因为我对shell不太熟,写shell主要是为了调用Python脚本。
下面是shell脚本clear_script.sh的内容:

#!/bin/bash
cd /data/sftp/upload
/usr/bin/python3 fileCleaner.py && echo "clear done" >> /data/sftp/upload/log/clear.log 2>&1

主要就是cd/data/sftp/upload 目录,执行Python脚本,因为我的脚本在这个位置放着。在执行Python脚本时指定该服务器上Python解释器的绝对路径,并将日志输出到指定日志文件。
下面是Python脚本的具体内容:

import os
import datetime
import shutil

"""
遍历所有的项目目录,每个项目目录下是以日期建立的文件夹,比较该文件夹时间与当前时间的时间差,如果时间差超过了10天,则删除该文件夹下所有文件及该文件夹;
"""
DATE_FORMAT = "%Y%m%d"
today_date = datetime.date.today()
root_path = os.getcwd()
for dir in os.listdir(root_path):
    # 判断当前文件是否为一个目录,是项目目录才进行处理
    if len(dir) != 2 or not dir.isalpha():
        continue
    print("current path: " + dir)
    # cur_path = root_path + "\\" + dir
    cur_path = root_path + "/" + dir
    for his_date in os.listdir(cur_path):
        if not his_date.isdigit():
            continue
        format_his_date = datetime.datetime.strptime(his_date, DATE_FORMAT).date()
        # 如果该目录数据与当前时间相差超过10天则删除
        diff = today_date - format_his_date
        if diff.days > 10:
            print("directory to be deleted: " + his_date)
            # shutil.rmtree(cur_path + "\\" + his_date, ignore_errors=True)
            shutil.rmtree(cur_path + "/" + his_date, ignore_errors=True)

print("Clear done.")

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

要查看 Linux 服务器上的定时任务配置,可以通过以下几种方式实现,具体取决于任务是用户级还是系统级设置的。 ### 用户级定时任务 用户级的定时任务通常通过 `crontab` 命令进行管理。要查看当前用户的定时任务列表,可以使用如下命令: ```bash crontab -l ``` 此命令会列出当前用户的所有定时任务条目。如果需要查看其他用户的定时任务,可能需要具有足够的权限,并使用类似下面的命令: ```bash sudo crontab -u username -l ``` 这里 `username` 是你想查看其定时任务的用户名 [^1]。 ### 系统级定时任务 对于系统级别的定时任务,这些通常位于 `/etc/crontab` 文件中,以及 `/etc/cron.d/` 目录下的文件里。你可以通过编辑这些文件来查看或修改系统级的定时任务配置: ```bash cat /etc/crontab ``` 或者查看 `/etc/cron.d/` 目录下的特定文件: ```bash ls /etc/cron.d/ cat /etc/cron.d/filename ``` 这里的 `filename` 是你想要查看的具体文件名 [^3]。 ### 使用 systemd 定时器 如果你的系统使用的是 `systemd` 作为初始化系统和服务管理工具,那么可能会有基于 `systemd` 的定时任务。这类任务可以通过以下命令查看: - 列出所有定时器: ```bash systemctl list-timers --all ``` - 查看特定定时器的状态和下一次执行时间: ```bash systemctl status myjob.timer ``` - 检查定时器的日志输出以获取更多信息: ```bash journalctl -u myjob.timer ``` 确保替换 `myjob.timer` 为实际存在的定时器名称 [^3]。 ### 日志监控 为了调试目的或是确认定时任务是否按预期运行,可以实时监控相关的日志文件。对于传统的 `cron` 服务,可以使用如下命令来跟踪日志: ```bash tail -f /var/log/cron ``` 这将显示 `cron` 服务的日志条目,帮助识别任何潜在的问题 [^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值