首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >尝试使用crontab和简单python脚本运行简单的docker容器

尝试使用crontab和简单python脚本运行简单的docker容器
EN

Stack Overflow用户
提问于 2021-01-24 06:48:06
回答 1查看 983关注 0票数 0

因此,我对创建容器非常陌生,我有一个简单的Dockerfile,我想在这里每分钟运行一个简单的python脚本:

代码语言:javascript
运行
AI代码解释
复制
FROM python:3.8-buster
RUN apt-get update && apt-get install -y cron
COPY my_python /bin/my_python
COPY root /var/spool/cron/crontabs/root
RUN chmod +x /bin/my_python
CMD cron -l 2 -f

其中my_python:

代码语言:javascript
运行
AI代码解释
复制
print("hi world!!")

和根:

代码语言:javascript
运行
AI代码解释
复制
* * * * * python3 /bin/my_python

然后我只创建图像和容器:

代码语言:javascript
运行
AI代码解释
复制
 docker image build -t python-test
 docker container run -it --name python-test python-test

我应该每分钟看到一次关于hi世界的打印,但是当运行容器(在图像构建之后)时,似乎没有出现任何日志。

我做错什么了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-24 09:04:48

首先,我认为您希望在您的-L 2命令行中使用-l 2而不是-l 2;有关详细信息,请参阅手册页

cron守护进程登录到syslog,所以如果某些东西没有按预期工作,那么安排接收这些消息是个好主意。busybox工具提供了一个简单的syslog守护进程,它可以登录到内存中的缓冲区和读取这些日志的工具,因此我修改了Dockerfile如下所示:

代码语言:javascript
运行
AI代码解释
复制
FROM python:3.8-buster
RUN apt-get update && apt-get install -y cron busybox
COPY my_python /bin/my_python
COPY root /var/spool/cron/crontabs/root
RUN chmod +x /bin/my_python
CMD busybox syslogd -C; cron -L 2 -f

启动此操作后,我将docker execd放入容器并运行busybox logread并发现:

代码语言:javascript
运行
AI代码解释
复制
Jan 24 16:50:45 7f516db86417 cron.info cron[4]: (CRON) INFO (pidfile fd = 3)
Jan 24 16:50:45 7f516db86417 cron.info cron[4]: (root) INSECURE MODE (mode 0600 expected) (crontabs/root)
Jan 24 16:50:45 7f516db86417 cron.info cron[4]: (CRON) INFO (Running @reboot jobs)

因此,您的问题是:root crontab上的权限不正确。有两种方法可以解决这个问题:

  1. 当我们将文件复制到适当的位置时,我们可以显式地chmod文件,或者
  2. 我们可以使用crontab命令来安装这个文件,它为我们处理这个问题。

我喜欢选项2,因为这意味着我们不需要知道cron在权限方面所期望的细节。这会让我们:

代码语言:javascript
运行
AI代码解释
复制
FROM python:3.8-buster
RUN apt-get update && apt-get install -y cron busybox
COPY my_python /bin/my_python
COPY root /tmp/root.crontab
RUN crontab /tmp/root.crontab
RUN chmod +x /bin/my_python
CMD busybox syslogd -C; cron -L 2 -f

通过这一更改,我们可以确认cron作业正在按预期运行:

代码语言:javascript
运行
AI代码解释
复制
Jan 24 16:59:50 8aa688ad31cc syslog.info syslogd started: BusyBox v1.30.1
Jan 24 16:59:50 8aa688ad31cc cron.info cron[4]: (CRON) INFO (pidfile fd = 3)
Jan 24 16:59:50 8aa688ad31cc cron.info cron[4]: (CRON) INFO (Running @reboot jobs)
Jan 24 17:00:01 8aa688ad31cc authpriv.err CRON[7]: pam_env(cron:session): Unable to open env file: /etc/default/locale: No such file or directory
Jan 24 17:00:01 8aa688ad31cc authpriv.info CRON[7]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 24 17:00:02 8aa688ad31cc cron.info CRON[7]: (root) END (python3 /bin/my_python)
Jan 24 17:00:02 8aa688ad31cc authpriv.info CRON[7]: pam_unix(cron:session): session closed for user root

但是.容器里还是没有输出!如果你翻阅手册页,你会发现:

然后,cron每分钟醒来,检查所有存储的crontab,检查每个命令是否应该在当前分钟内运行。在执行命令时,任何输出都会邮寄给crontab的所有者(如果存在,则发送给crontab中MAILTO环境变量中指定的用户).

换句话说,cron从程序中收集输出,并试图发送给拥有cron作业的用户。如果希望在控制台上看到来自cron作业的输出,则需要显式地重定向stdout,如下所示:

代码语言:javascript
运行
AI代码解释
复制
* * * * * python3 /bin/my_python > /dev/console

在进行此更改后,运行图像将导致消息.

代码语言:javascript
运行
AI代码解释
复制
hi world!

...printing每分钟到控制台一次。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65871983

复制
相关文章
PHP的URL处理
完整URL地址: http://username:password@hostname/path?arg=value#auchor 协议:http:// 用户名和密码: username:passw
Java架构师必看
2021/03/22
3.8K0
webpack处理url资源的配置
webpack处理url资源的配置 1.安装 npm i url-loader -D 2.修改webpack.config.js const path = require('path'); // 启用热更新的 第2步 const webpack = require('webpack') //导入html插件 //只要是插件,都一定要放到plugins节点中去 const htmlWebpackPlugin = require('html-webpack-plugin') // 这个配置文件,起始就是一个 J
Dream城堡
2018/12/12
7510
java url加密_Java实现url加密处理的方法示例
public static String crypt(String content,String password,int i){
全栈程序员站长
2022/11/01
1.7K0
nginx配置实现ip访问指定URL
我的需求是这样的,nginx+uwsgi启动的web服务,访问域名XX.CN之后,nginx报错404,我需要实现的是访问XX.CN,自动映射到XX.CN/login 因为我server是80端口,所以不需要加端口即可访问
cywhat
2022/11/22
2.6K0
将CSV的数据发送到kafka(java版)
前面的图可以看出,读取CSV再发送消息到kafka的操作是Java应用所为,因此今天的主要工作就是开发这个Java应用,并验证;
程序员欣宸
2021/04/16
3.5K0
将CSV的数据发送到kafka(java版)
nginx反向代理到后端tomcat,并将IP地址发送到后端的配置
/usr/local/nginx/conf/nginx.conf 在http段不要有下面4行:
保持热爱奔赴山海
2019/09/18
1.3K0
URL处理----拼接和编码
        前几天想爬取一个用户网站自动创建每个用户的资料方便注册一些账号,想写一个通用点的爬虫程序爬取只要配置一些爬取规则、爬取深度就ok,避免代码改动,由于时间关系只完成的个半成品,后面在考虑是用xml文件作为配置文件,还是简单的使用.ini文件,后者虽然简单但局限性太大,所以,,,偷几天懒顺便重新考虑下逻辑。
py3study
2020/01/19
1.4K0
PHP 获取 IP 地址形式的完整 URL 页面网址
PHP 获取包含端口号的完整 URL 中,$_SERVER 有些写法只能获取域名形式的 URL ,采用 IP 地址的 URL 是获取不到的。
Yangsh888
2022/03/23
2.2K0
GPS之 NMEA-0183协议
NMEA0183的六种输出协议:GPGGA、GPGLL、GPGSA、GPGSV、GPRMC、GPVTG。
心跳包
2020/08/31
3K0
VB.NET URL(域名)转IP地址
我在脑中快速回忆着,对了!URL即 Uniform Resource Locator的缩写,翻译成中文便是“统一资源定位符”。因为互联网世界存在着不计其数的资源,每一处资源都需要有一个标记来定位它,正如人类城市中的门牌号。
办公魔盒
2020/04/27
15.3K1
VB.NET URL(域名)转IP地址
前端处理动态 url 和 pushStatus 的使用
起因是这样的,在尝试前后端分离的这条道路上,我自己也在不断摸索,感觉要把大部分的坑都踩踩了。目前我用的技术是:
零式的天空
2022/03/22
1.3K0
完整的url以及同源跨域处理
CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。
用户7657330
2020/08/14
8430
Python技巧_处理带参数的超长URL
今天写了个脚本 主要就是实现利用SQLInj点直接把数据获取到本地并存到Mysql数据库中
py3study
2020/01/09
1.3K0
(1)当你输入URL到页面显示经历了什么--URL到IP地址
这是一个经典的问题,能区分知识的广度与深度,从回答的侧重点上甚至能区分出工种(前端、后端、运维等)。开发人员基本上都能说出几点,而牛人更可在自己擅长的地方发挥到淋漓尽致。 由于知识有限,我只从下面四点
前端黑板报
2018/01/29
1.1K0
(1)当你输入URL到页面显示经历了什么--URL到IP地址
Django如何处理URL请求
视图函数是一个用来接收浏览器请求(HttpRequest)对象并通过HttpRequest对象返回响应函数。此函数可以接收浏览器请求并根据业务逻辑返回相应的内容.
Yuou
2022/09/26
1.9K0
Django获取URL中的数据
我们将第一种形式称为“URL路径参数”;第二种形式称为“URL关键字形式”。下面讲述如何在Django中获取这两种形式的数据。
zy010101
2021/11/02
5.7K0
nmealib解析-----(3)---
/*  *  * NMEA library  * URL: http://nmea.sourceforge.net  * Author: Tim (xtimor@gmail.com)  * Licence: http://www.gnu.org/licenses/lgpl.html  * $Id: time.h 4 2007-08-27 13:11:03Z xtimor $  *  */ /*! \file */ //该函数主要是对于nmea时间的处理 #ifndef __NMEA_TIME_H__ #de
py3study
2020/01/08
7590
Python:ip地址处理模块
安装 1.先下载源码,地址:https://pypi.python.org/pypi/IPy/,然后解压后使用命令python setup.py install安装。 2.或者直接使用pip install ipy进行安装 使用 查看IP地址版本 >>> IPy.IP('192.168.1.1').version() 4 >>> IPy.IP('::1').version() 6 计算网段IP数量 #!/usr/bin/env python #coding:utf-8 import IPy   ip =
行 者
2018/03/26
1.6K0
为什么 url 通常使用域名而不是 IP 地址?
大家好,我是前端西瓜哥。今天来谈谈为什么我们的网址,通常是使用域名,而不是 IP 地址。
前端西瓜哥
2022/12/21
1.8K0
懒人的小技巧, 批处理修改IP
相信很多人都有这样的麻烦, 工作单位的IP网段与住的不一致, 自己的笔记本在单位和回家的时候每次都要更改IP, 很麻烦,  菜鸟小罗偷个懒, 做了个批处理来修改IP,方便一点. 还有就是可以把工作的时候才需要启动的服务( 比如数据库服务特别是Oracle ,sqlserver) 设置为手动, 只有更换为单位IP的时候才启动它, 平时在家玩的时候也可以节省点资源. 将下面的文本做成bat, IP改为自己用的IP就可以了. @echo off color e setlocal enabledelayed
FlyLolo
2018/05/17
1.6K0

相似问题

将浮点数设置为左时图像消失

14

当FlowDirection设置为RightToLeft时,文本消失

11

文本在单击时消失,但新输入的文本将消失为

55

将Navbar设置为默认值

13

当我将` to zingMaskIntoConstraints`设置为`NO`时,视图消失

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文