【问题标题】:How can i run docker commands outside container, with cron on the host?如何在主机上使用 cron 在容器外运行 docker 命令?
【发布时间】:2021-06-22 15:28:27
【问题描述】:

我需要使用 docker ps 自动验证活动容器,并使用 docker pull 发送容器更新。所以我创建了这个脚本文件:

if docker ps | grep "fairplay";then
  echo "doker fairplay ok" >> /home/ubuntu/at2.log
else
  echo "doker fairplay caido" >> /home/ubuntu/at2.log
  errdock=1
fi

当我在终端上手动使用时,脚本可以正常工作,但是当我尝试使用 cron 时,它就不起作用了。

Crontab:

* * * * *   root    sh /home/ubuntu/at2.sh 

我手动运行时的日志:

Thu Mar 25 13:33:43 -03 2021
doker fairplay ok
doker widevine ok
Thu Mar 25 13:33:44 -03 2021

使用 cron 运行时的日志:

Thu Mar 25 13:34:01 -03 2021
doker fairplay caido
doker widevine caido
Thu Mar 25 13:34:01 -03 2021

我不想在容器内运行任何东西,我需要在主机上的 cron 中运行命令,所以以下问题对question 1question 2 没有帮助。

【问题讨论】:

  • 我建议在 systemd 上创建一个service,这样当它失败时,您可以告诉服务重新启动,并且您将获得实时日志。你试过吗?你想要那个还是想要在 crontab 中添加它?
  • 我还没有尝试过,但我看不出重新启动会有什么帮助,因为当它是发送命令的 cron 时,它们都失败了。我只需要知道为什么当它是发送命令的 crontab 时它不起作用。因为它与我在终端上发送的命令相同。
  • 我创建了一个service,它每 300 秒重复一次,它成功了!非常感谢!

标签: docker cron


【解决方案1】:

您的 crontab 语法不正确。我已经尝试了您的确切 .sh 文件,但没有出现任何错误。

这是正确的:

* * * * *   sh /home/ubuntu/at2.sh 

我不确定你为什么在 crontab 语法中添加了root 用户或单词,就好像你运行root sh /home/ubuntu/at2.sh,你会得到Command 'root' not found

我还可以建议您添加 date 变量,以便您知道它的上升或下降时间:

if docker ps | grep "fairplay";then
then
  echo "`date +"%D %H:%M:%S"` docker fairplay ok" >> /home/ubuntu/at2.log
else
  echo "`date +"%D %H:%M:%S"` docker fairplay caido" >> /home/ubuntu/at2.log
  errdock=1
fi

【讨论】:

  • 我对你的截图感到困惑。请编辑问题并将它们添加到那里。同时在代码编辑器中分享代码,请不要发送您的代码截图。
猜你喜欢
  • 2020-07-28
  • 2019-10-13
  • 2019-10-05
  • 1970-01-01
  • 2020-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多