我的谷歌云项目中运行的项目很少,我试图在特定时间停止它们并在特定时间开始。
我创建了一个用于停止 test.sh
的脚本文件
#!/bin/bash
gcloud compute instances stop instance1
现在我尝试了crontab -e
并添加了这个,30 01 1-31 1-12 1-5 /home/user/test.sh >> /var/log/test.log
但这并没有停止我的 gcp 实例,也没有创建任何日志文件。更新,
我只是对时间感到困惑
00 10 * * 1-5 start.sh
00 01 * * 1-5 stop.sh
00 01 * * 6 stop.sh
这在周六和周日将如何运作?我想在星期六停止实例 1am
并在星期一重新开始 10am
.我的配置正确吗?从周一到周五,它应该在凌晨 1 点关闭,并在早上 10 点开始。
最佳答案
`crontab` 以 root (!?) 身份运行,因此未对 `gcloud` 进行身份验证
可能有更好的选择,但通过解决方案的概述:
cron
使用gcloud auth activate-service-account
用于实例上的 root(在启动期间或根据 cron
任务)cron
工作201126更新
抱歉,我误读了您的问题,并认为您想运行
cron
在 Compute Engine 实例上也是如此。我想你想运行
cron
本地。诀窍 (!) 是确保您的命令使用绝对路径。
which gcloud
对我来说,这会返回 /snap/bin/gcloud
因为我在 Ubuntu 上运行并且有 gcloud
快速安装。这对您来说可能会有所不同。然后,以下对我有用:
stop.sh
:#!/usr/bin/env bash
PROJECT=[[YOUR-PROJECT]]
INSTANCE=[[YOUR-INSTANCE]]
ZONE=[[YOUR-ZONE]]
echo "[$(date --rfc-3339=seconds)] Stopping ${INSTANCE}"
/snap/bin/gcloud compute instances stop ${INSTANCE} \
--project=${PROJECT} \
--zone=${ZONE} \
--verbosity=debug
echo "[$(date --rfc-3339=seconds)] Stopped ${INSTANCE}"
NOTE I've added
--verbosity=debug
but you may prefer to reduce or omit this entirely.
确保脚本可执行:
chmod +x /path/to/stop.sh
然后crontab -e
:# Stackoverflow: 64994379
* * * * * /path/to/stop.sh >>/path/to/stop.log 2>&1
NOTE You want
30 01 1-31 1-12 1-5
here. This may be simpler as30 01 * * 1-5
和:
[2020-11-26 09:39:01-08:00] Stopping [[YOUR-INSTANCE]]
DEBUG: Running [gcloud.compute.instances.stop] with arguments: [--project: "[[YOUR-PROJECT]]", --verbosity: "debug", --zone: "[[YOUR-ZONE]]", INSTANCE_NAMES:1: "['[[YOUR-INSTANCE]]']"]
Stopping instance(s) [[YOUR-INSTANCE]]...
......done.
Updated [https://compute.googleapis.com/compute/v1/projects/[[YOUR-PROJECT]]/zones/[[YOUR-ZONE]]/instances/[[YOUR-INSTANCE]]].
INFO: Display format: "none"
DEBUG: SDK update checks are disabled.
[2020-11-26 09:39:04-08:00] Stopped [[YOUR-INSTANCE]]
[2020-11-26 09:40:01-08:00] Stopping [[YOUR-INSTANCE]]
DEBUG: Running [gcloud.compute.instances.stop] with arguments: [--project: "[[YOUR-PROJECT]]", --verbosity: "debug", --zone: "[[YOUR-ZONE]]", INSTANCE_NAMES:1: "['[[YOUR-INSTANCE]]']"]
Stopping instance(s) [[YOUR-INSTANCE]]...
.....done.
Updated [https://compute.googleapis.com/compute/v1/projects/[[YOUR-PROJECT]]/zones/[[YOUR-ZONE]]/instances/[[YOUR-INSTANCE]]].
INFO: Display format: "none"
DEBUG: SDK update checks are disabled.
[2020-11-26 09:40:04-08:00] Stopped [[YOUR-INSTANCE]]
[2020-11-26 09:41:01-08:00] Stopping [[YOUR-INSTANCE]]
DEBUG: Running [gcloud.compute.instances.stop] with arguments: [--project: "[[YOUR-PROJECT]]", --verbosity: "debug", --zone: "[[YOUR-ZONE]]", INSTANCE_NAMES:1: "['[[YOUR-INSTANCE]]']"]
Stopping instance(s) [[YOUR-INSTANCE]]...
......done.
Updated [https://compute.googleapis.com/compute/v1/projects/[[YOUR-PROJECT]]/zones/[[YOUR-ZONE]]/instances/[[YOUR-INSTANCE]]].
INFO: Display format: "none"
DEBUG: SDK update checks are disabled.
[2020-11-26 09:41:05-08:00] Stopped [[YOUR-INSTANCE]]
谷歌 Cloud Scheduler无论您的主机(正在运行 cron
)是否正在运行,都可以为您提供运行的额外好处。如果您想非常勤奋,您可以扩充脚本以迭代所有项目并关闭每个实例。在这种情况下,最好让脚本也通知您其成功或失败,以免您自满。
关于ubuntu - gcloud 命令在 crontab -e 中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64994379/