问题描述
我正在 Linode 上运行一个 Azuracast docker 实例,并想尝试找到一种方法来自动化我的更新。现在我的日常工作是,当我通过访问 Azuracast Web 面板注意到有更新时,我通常使用以下命令运行 timeshift 以创建备份
timeshift —-create —-comment “azuracast 更新”
然后我使用以下内容更新 azuracast
cd /var/azuracast/ ./docker.sh 更新自我 ./docker.sh 更新
然后它要求我确保在更新之前备份 azuracast 安装,我通常只需按 Enter。
完成后,它问我是否要清理所有停止的 docker 容器和图像以节省空间,我通常会拒绝。
我想知道是否有办法创建一个 bash 脚本、python 或其他东西来自动化所有这些,然后让它按计划运行?
解决方法
当然,您可以编写一个 shell 脚本来执行这些命令,然后使用 crontab(5) 按计划运行它。
例如,您的脚本可能如下所示:
#! /bin/sh
# Backup azuracast and restart docker container
timeshift --create --comment “azuracast update” && \
cd /var/azuracast/ && \
./docker.sh update-self && \
(yes | ./docker.sh update)
听起来这个 docker.sh
程序需要一些用户输入。看看是否有您可以传递给它的选项,可以让您以非交互方式运行它。 (似乎没有,请参阅编辑。)
要设置您的 cron 作业,您可以将脚本放在 /etc/cron.hourly
、/etc/cron.daily
、/etc/cron.weekly
或 /etc/cron.monthly
中。或者,如果您需要更多控制,您可以使用 crontab -e
开始配置 cron 作业。 Better explanation。
EDIT:假设您正在使用 this is the script,它似乎无法以非交互方式运行 update
。不过不用担心,有一个程序可以解决这个问题:yes(1)。这对这两个问题的回答都是肯定的,但诚实地运行 docker system prune -f
可能是一个好主意。如果您真的想对此回答“否”,您可以将 yes
替换为 printf "y\nn"
,以对第一个回答“是”,对第二个回答“否”。
另请注意,它可能会问您 least one other y/n 问题,您可能想回答“yes”。