Linux 在命令 运行 docker-撰写
Linux At Command running docker-compose
目标:我正尝试在预定的时间安排'docker-compose up'
操作系统:LinuxUbuntu18.04
我已经尝试在 linux 中使用 'at' 命令,但我正在尝试设置变量但无法正常工作。
以下尝试:
sudo echo "KEY='VALUE' DIRECTION='D' sh run.sh" | at now + 2 minute
# Above does not run the docker-compose
sudo echo "KEY='VALUE' DIRECTION='D' sh run.sh" | at now + 2 minute
# Above runs docker-compose command immediately but not in 2 minutes
# run.sh
# SET LOGFILE LOCATION
LOG_FILE="/var/log/at/test.log"
FLIGHT_FILE="flight.yaml" docker-compose up --abort-on-container-exit >> "${LOG_FILE}"
如果有比使用 'at' 命令更好的方法,我也愿意接受。
提前致谢
有 2 种可能的方法 -
单个文件-
创建文件/etc/systemd/system/dc-test.service
[Unit]
Description=My Docker Compose runner
[Service]
User=%I
Restart=always
RestartSec=600s
ExecStart=/bin/bash /home/user/run.sh
以上将 运行 脚本每 600 秒。
多文件(带服务计时器)
您需要创建两个同名文件,一个用于服务,另一个用于计时器。
示例:
/etc/systemd/system/dc-test.服务
[Unit]
Description=My Docker Compose runner
[Service]
Type=oneshot
ExecStart=/bin/bash /home/user/run.sh
/etc/systemd/system/dc-test.timer
[Unit]
Description=Docker Compose Timer
[Timer]
OnUnitActiveSec=600s
OnBootSec=600s
[Install]
WantedBy=timers.target
在这两种方法中,您都需要在创建文件后 运行 systemctl daemon-reload
。
在您的示例中(两次尝试相同)只有 echo
由 sudo
执行,at
作为您的用户执行。
选项:
运行 根 at
队列上的脚本:
sudo sh -c "echo \"KEY='VALUE' DIRECTION='D' sh /home/user/run.sh \" | at now + 1 min"
make at
运行 sudo
- 仅当您 sudo
设置为不询问密码时才有效:
echo "sudo sh -c \"KEY='VALUE' DIRECTION='D' /home/user/run.sh\"" | at now + 2 min
配置 docker 这样你就不需要 sudo
目标:我正尝试在预定的时间安排'docker-compose up'
操作系统:LinuxUbuntu18.04
我已经尝试在 linux 中使用 'at' 命令,但我正在尝试设置变量但无法正常工作。
以下尝试:
sudo echo "KEY='VALUE' DIRECTION='D' sh run.sh" | at now + 2 minute
# Above does not run the docker-compose
sudo echo "KEY='VALUE' DIRECTION='D' sh run.sh" | at now + 2 minute
# Above runs docker-compose command immediately but not in 2 minutes
# run.sh
# SET LOGFILE LOCATION
LOG_FILE="/var/log/at/test.log"
FLIGHT_FILE="flight.yaml" docker-compose up --abort-on-container-exit >> "${LOG_FILE}"
如果有比使用 'at' 命令更好的方法,我也愿意接受。
提前致谢
有 2 种可能的方法 -
单个文件-
创建文件/etc/systemd/system/dc-test.service
[Unit]
Description=My Docker Compose runner
[Service]
User=%I
Restart=always
RestartSec=600s
ExecStart=/bin/bash /home/user/run.sh
以上将 运行 脚本每 600 秒。
多文件(带服务计时器)
您需要创建两个同名文件,一个用于服务,另一个用于计时器。
示例:
/etc/systemd/system/dc-test.服务
[Unit]
Description=My Docker Compose runner
[Service]
Type=oneshot
ExecStart=/bin/bash /home/user/run.sh
/etc/systemd/system/dc-test.timer
[Unit]
Description=Docker Compose Timer
[Timer]
OnUnitActiveSec=600s
OnBootSec=600s
[Install]
WantedBy=timers.target
在这两种方法中,您都需要在创建文件后 运行 systemctl daemon-reload
。
在您的示例中(两次尝试相同)只有 echo
由 sudo
执行,at
作为您的用户执行。
选项:
运行 根 at
队列上的脚本:
sudo sh -c "echo \"KEY='VALUE' DIRECTION='D' sh /home/user/run.sh \" | at now + 1 min"
make at
运行 sudo
- 仅当您 sudo
设置为不询问密码时才有效:
echo "sudo sh -c \"KEY='VALUE' DIRECTION='D' /home/user/run.sh\"" | at now + 2 min
配置 docker 这样你就不需要 sudo