自动执行时移备份和 azuracast 更新的脚本

问题描述

我正在 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”。