Crontab定时任务运行Docker容器(Ubuntu 20)

对于一些离线预测任务,或者D+1天的预测任务,可以简单地采用Crontab做定时调用项目代码运行项目

Crontab简介:
Linux crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。通过 crontab 命令,用户可以添加、修改、删除和列出定时任务,以实现自动化执行特定任务。

Crontab下载

sudo apt-get install cron

Docker镜像
我们新建一个名为cron-test的容器,使用下面这个py代码作为测试

import numpy as np

if __name__ == '__main__':
    x = np.empty([2,4])
    print(x)

容器运行结果如下:
在这里插入图片描述


使用shell脚本运行容器
在当前目录下,终端执行命令进入shell脚本编辑

  1. 新建一个名为cron-test的shell脚本
touch cron-test.sh
  1. 终端运行 vim cron-test.sh 编辑脚本,i进入编辑,Esc退出编辑,shift+:wq!保存并退出
    注:#!/bin/bash 明确指定脚本使用 Bash 解释器执行,而 #!/bin/sh 使用系统默认的Shell(可能是Bash或其他兼容的Shell)执行。如果脚本依赖于特定的Bash功能,或者想确保在不同的系统上都使用Bash作为解释器,那么使用 #!/bin/bash 是一个更安全的选择。

在这里我的shell脚本如下:
在这里插入图片描述

  1. 终端运行命令执行shell脚本
/home/licy/文档/cron-test.sh

使用crontab设置定时任务运行shell脚本
打开crontab编辑器

crontab -e

编写定时任务命令
基本格式:分钟 小时 一月的第几天 月份 周几 用户名 要执行的命令

Example of job definition:
.---------------- minute (0 - 59)
|  .------------- hour (0 - 23)
|  |  .---------- day of month (1 - 31)
|  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
|  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
|  |  |  |  |
*  *  *  *  * user-name command to be executed

例如我们想每分钟运行一次shell脚本,写法如下

* * * * * /home/licy/文档/cron-test.sh

然后保存crontab并退出

按下Ctrl + O保存更改,然后按下Enter确认
按下Ctrl + X退出编辑器。

我们就可以在日志文件里找到脚本的运行结果了
在这里插入图片描述

我们还可以在/var/log/cron*中找到运行日志:

在这里插入图片描述

定时任务常见于日报周报月报,这里也给一下写法

# 每天早上8点运行
0 8 * * *  [command]

# 每周一早上8点运行
0 8 * * 1  [command]

# 每个月第一天的早上8点运行
0 8 1 * *  [command]

Crontab执行时间计算 - 在线工具

在上述Crontab定时任务下,因为我们运行的是脚本文件,因此若代码中有有报错的话将不会发送输出文件,但会将报错信息发送邮件,默认邮件的路径为 /var/mail,可以通过邮件了解报错原因。
如果直接在Crontab里执行Docker任务(不经过shell脚本),则每一次执行任务后都将输出发送邮件。可以修改命令不发送邮件避免占用空间:

* * * * * /yourpath/yourcommand > /dev/null

Crontab其他常用命令

  1. Crontab 启动、停止、重启命令
#  启动服务
service crond start
# 关闭服务
service crond stop 
# 重启服务
service crond restart
# 重新载入配置
service crond reload
# 查看crontab服务状态
service crond status
# 同样可以设置开机自启动
chkconfig --level 345 crond on
  1. 查看、添加、删除任务
# 查看crontab定时任务
crontab -l
# 添加任务,cron表达式  sh脚本路径
crontab -e
# 删除所有的定时任务
crontab -r

常见报错:
1. Permission denied while trying to connect to the Docker daemon socket at unix
原因:docker进程使用 Unix Socket 而不是 TCP 端口。而默认情况下,Unix socket 属于 root 用户,因此需要 root权限 才能访问
解决:为了避免每次运行Docker命令的时候都需要输入sudo,可以创建一个docker用户组,并把相应的用户添加到docker分组里面。当docker进程启动的时候,会设置套接字可以被docker分组的用户读写。

查看docker组中的用户

cat /etc/group | grep docker

在这里插入图片描述

在这里可以看到,我们的Docker用户组(GID为998)当前没有任何用户,因此我们需要将用户加入Docker组

sudo gpasswd -a ${USER} docker  # 例如我的USER是licy

更新当前Docker用户组

newgrp docker

重新运行命令查看docker组中的用户,这时就可以看到我已经被加入到docker用户组中
在这里插入图片描述

2. 找不到执行任务的邮件
原因:系统中没有安装邮件传输代理(MTA),因此cron任务的输出被丢弃了。
解决:终端运行以下命令安装Postfix:

sudo apt update
sudo apt install postfix

3. 频繁发送执行邮件占用空间

# 修改执行命令为:
* * * * * /yourpath/yourcommand > /dev/null

4. 找不到crontab日志
解决:需要通过配置打开crontab的日志记录功能

sudo vim /etc/rsyslog.d/50-default.conf
cron.* /var/log/cron.log # 将cron前面的注释去掉
# 重启rsyslog
sudo /etc/init.d/rsyslog restart
# 重启rsyslog
sudo service rsyslog restart 
# 重启cron程度
sudo service cron restart

参考来源:
解决 ERROR:Docker Got permission denied while trying to connect to the Docker daemon socket at unix

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/97835.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

重磅!GPT-3.5 Turbo推出微调功能,可以打造专属ChatGPT啦!

昨天的追友套路竟然没人看,太可惜了。虽然我知道大家都想快速成功,而且快速成功的秘诀很简单:MONEY!(钱) 可是大伙缺的反而正是这个。 大清早,刷X,看到了一则推送。 OpenAI宣布推出G…

1.网络空间搜素引擎

网络空间搜素引擎 https://cybermap.kaspersky.com/cn 世界所以带有ip的网络设备互联组成的空间叫做网络空间 地址 :shodan.io 简介 : 这句话还是有点东西得 。 区别: 平常得搜素引擎主要搜网页,shadan可以搜所以带有ip地址…

Jmter生成MD5 jmter使用md5 jmter使用自定义参数 jmter生成自定义参数 jmter编写java代码

Jmter生成MD5 jmter使用md5 jmter使用自定义参数 jmter生成自定义参数 jmter编写java代码 1、创建一个线程组2、创建线程组 http请求3、在 http请求添加前置处理器(BeanShell)4、请求测试 是否生效4.1 GET请求4.2 POST请求 1、创建一个线程组 2、创建线程组 http请求 在线程组…

在外SSH远程连接macOS服务器【cpolar内网穿透】

文章目录 前言1. macOS打开远程登录2. 局域网内测试ssh远程3. 公网ssh远程连接macOS3.1 macOS安装配置cpolar3.2 获取ssh隧道公网地址3.3 测试公网ssh远程连接macOS 4. 配置公网固定TCP地址4.1 保留一个固定TCP端口地址4.2 配置固定TCP端口地址 5. 使用固定TCP端口地址ssh远程 …

Approaching (Almost) Any Machine Learning Problem中译版

前言 Abhishek Thakur,很多kaggler对他都非常熟悉,2017年,他在 Linkedin 发表了一篇名为Approaching (Almost) Any Machine Learning Problem的文章,介绍他建立的一个自动的机器学习框架,几乎可以解决任何机器学习问题…

AI 绘画Stable Diffusion 研究(十五)SD Embedding详解

大家好,我是风雨无阻。 本期内容: Embedding是什么?Embedding有什么作用?Embedding如何下载安装?如何使用Embedding? 大家还记得 AI 绘画Stable Diffusion 研究(七) 一文读懂 Stab…

5分钟看懂物料清单(BOM)的用途、类型及管理

管理物料可以提高制造和供应链流程的效率,例如生产、物流、调度、产品成本核算和库存计划。企业通常使用物料清单作为制造产品的组件、材料和流程的中央记录。 物料清单(BOM)是构建、制造或维修产品或服务所需的原材料、组件和说明的详细列表…

Linux线程控制

目录 一、线程的简单控制 1.多线程并行 2.线程结束 3.线程等待 (1)系统调用 (2)返回值 4.线程取消 5.线程分离 二、C多线程小组件 三、线程库TCB 1.tid 2.局部储存 一、线程的简单控制 1.多线程并行 我们之前学过pt…

代码随想录笔记--哈希表篇

目录 1--有效的字母异位词 2--两个数组的交集 3--两数之和 4--四数相加II 5--三数之和 6--四数之和 1--有效的字母异位词 利用哈希表存储每个字母的出现次数&#xff0c;比较两个字符串各个字母出现次数是否相等即可&#xff1b; #include <iostream> #include <…

QT基础教程之七Qt消息机制和事件

QT基础教程之七Qt消息机制和事件 事件 事件&#xff08;event&#xff09;是由系统或者 Qt 本身在不同的时刻发出的。当用户按下鼠标、敲下键盘&#xff0c;或者是窗口需要重新绘制的时候&#xff0c;都会发出一个相应的事件。一些事件在对用户操作做出响应时发出&#xff0c…

CRM通过哪四个特点赢得不同类型的客户

1.设置正确的目标 首先&#xff0c;在CRM系统中设置正确的目标是非常重要的。不同类型的客户有不同的需求和预期&#xff0c;需要使用不同的方法去处理。如果企业想吸引新客户&#xff0c;那么企业需要更加侧重于建立品牌形象和提供相关的信息。如果企业想留住老客户&#xff…

Socks5代理 vs. Socks4代理:特点和区别解析

在网络通信中&#xff0c;使用代理服务器可以提供更安全、匿名的连接。其中&#xff0c;Socks5和Socks4是两种常见的代理协议。本文将深入探讨它们之间的特点和区别&#xff0c;帮助您选择适合自己需求的代理类型。 1.特点概述 -Socks5&#xff08;Socket Secure 5&#xff0…

MP中的字段还可以利用函数来查询拼接sql

//根据value查询GetMapping("getTest")public List<HashMap> getTest() {QueryWrapper<TTest> queryWrapper new QueryWrapper<>();queryWrapper.eq("substr(name,1,2)","99999");List<TTest> list1 testService.list…

Linux网络编程:线程池并发服务器 _UDP客户端和服务器_本地和网络套接字

文章目录&#xff1a; 一&#xff1a;线程池模块分析 threadpool.c 二&#xff1a;UDP通信 1.TCP通信和UDP通信各自的优缺点 2.UDP实现的C/S模型 server.c client.c 三&#xff1a;套接字 1.本地套接字 2.本地套 和 网络套对比 server.c client.c 一&#xff1a;线…

ogg怎么转mp3格式?让我们一起来学习吧

ogg怎么转mp3格式&#xff1f;如今&#xff0c;有许多种音频格式可供选择&#xff0c;其中包括了很多小伙伴可能并不熟悉的OGG音频格式。OGG的全称是OGG Vorbis&#xff0c;它是一种免费开放且没有使用限制的音频格式&#xff0c;因此备受许多小伙伴的喜爱。然而&#xff0c;OG…

打破数据孤岛,实现文档数据互通

随着数字经济加速发展&#xff0c;企业数字化转型正向更深层次推进。非结构化数据量也正在飞速增长&#xff0c;这些数据以文档、图片、音频等形式散落在组织内部&#xff0c;这给数据的整理和统一利用增加了难度。由于部门、应用、框架、多云环境等原因形成非结构化数据孤岛。…

【React源码实现】元素渲染的实现原理

前言 本文将结合React的设计思想来实现元素的渲染&#xff0c;即通过JSX语法的方式是如何创建为真实dom渲染到页面上&#xff0c;本文基本不涉及React的源码&#xff0c;但与React的实现思路是一致的&#xff0c;所以非常适合小白学习&#xff0c;建议跟着步骤敲代码&#xff…

csp认证真题——重复局面——Java题解

目录 题目背景 问题描述 输入格式 输出格式 样例输入 样例输出 样例说明 子任务 提示 【思路解析】 【代码实现】 题目背景 国际象棋在对局时&#xff0c;同一局面连续或间断出现3次或3次以上&#xff0c;可由任意一方提出和棋。 问题描述 国际象棋每一个局面可以…

01JVM_内存结构

一、什么是JVM 1.JVM的定义 Java程序的运行环境&#xff0c;java二进制字节码的运行环境 2.JVM的好处 ①一次编写&#xff0c;到处运行 ②自动内存管理&#xff0c;垃圾回收功能 ③数组下标越界检查 ④多态 3.jvm&#xff0c;jre&#xff0c;jdk的比较 3.常见的JVM 主…

Mac下Docker Desktop安装命令行工具、开启本地远程访问

Mac系统下&#xff0c;为了方便在terminal和idea里使用docker&#xff0c;需要安装docker命令行工具&#xff0c;和开启Docker Desktop本地远程访问。 具体方法是在设置-高级下&#xff0c; 1.将勾选的User调整为System&#xff0c;这样不用手动配置PATH即可使用docker命令 …