在Docker中运行带有cron的go脚本
我一直在尝试在Ubuntu16.04Docker映像下使用cron运行go脚本。这是我收到的文件 Dockerfile在Docker中运行带有cron的go脚本,docker,go,cron,ubuntu-16.04,couchbase,Docker,Go,Cron,Ubuntu 16.04,Couchbase,我一直在尝试在Ubuntu16.04Docker映像下使用cron运行go脚本。这是我收到的文件 Dockerfile FROM couchbase RUN apt-get update RUN apt-get install gcc make -y RUN apt-get install golang-1.10 git -y ADD src/crontab.txt /crontab.txt ADD src/backup.sh /backup.sh ADD src/backup.go /ba
FROM couchbase
RUN apt-get update
RUN apt-get install gcc make -y
RUN apt-get install golang-1.10 git -y
ADD src/crontab.txt /crontab.txt
ADD src/backup.sh /backup.sh
ADD src/backup.go /backup.go
ADD src/file.txt /file.txt
COPY entry.sh /entry.sh
RUN chmod 755 /backup.sh /entry.sh
RUN /usr/bin/crontab /crontab.txt
RUN apt-get install vim -y
CMD ["/entry.sh"]
entry.sh
#!/bin/sh
/usr/sbin/cron -f -l 8
src/crontab.txt
* * * * * /backup.sh >> /var/log/backup.log
src/backup.sh
#!/bin/sh
chmod 666 /var/log/backup.log
/usr/lib/go-1.10/bin/go run backup.go
备份,开始
package main
import (
"log"
"os"
"strings"
)
func init() {
file, err := os.OpenFile("/var/log/backup.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666)
if err != nil {
log.Fatal(err)
}
log.SetOutput(file)
}
func main() {
log.Println("Writing log")
}
我检查了一下,cron任务每分钟都在运行。go安装在文件夹中,当我执行到容器中时,它可以工作,但是
backup.go
脚本没有记录任何内容。当我手动触发脚本时,它仍然可以工作。我正在使用的容器有Ubuntu 16.04,我想要它,因为我不必安装couchbase。你可以通过使用一个。首先使用Go映像从src/backup.Go
编译一个独立的可执行文件。然后切换到cougbase
图像,并从上一步复制可执行文件
Dockerfile:
#使用第一阶段映像构建go代码
#我们以后再换
来自golang:1.10竣工时
#现在我们只需要go代码
复制src/backup.go backup.go
#构建一个独立的可执行文件
运行go build-o/backup.go
#切换到第二阶段生产映像
从卧铺
#设置cronjob
复制src/crontab.txt/crontab.txt
运行/usr/bin/crontab/crontab.txt
#从第一阶段复制可执行文件
#进入生产形象
复制--从=生成/备份/备份
CMD[“/usr/sbin/cron”、“-f”、“-l”、“8”]
src/crontab.txt:
* * * * * /backup >> /var/log/backup.log
按如下方式构建和运行:
docker构建-t备份
#从背景开始
docker运行--名称备份-d测试
#检查它是否有效
docker exec backup tail-f/var/log/backup.log
下一分钟:
2021/04/09 19:05:01 Writing log
Go没有“脚本”;你的意思是在Dockerfile中编译程序吗?@mahendra Go将自动运行。(但作为一种风格,我会尽可能避免使用它们:如果当前用户无法写入
/var/log
,则在任何上下文(包括测试)中,该程序几乎都会以静默方式无法启动。)@DavidMaze我希望能够执行它,因为我可以使用go run在本地执行它。您建议采用什么方法来避免静默故障并进行适当的日志记录?将backup.go编译为二进制文件,然后重试。go build。@EddwinPaz尝试执行go build backup.go,然后执行./backup,但仍然没有结果。