如何在晚上关闭 Microsoft Azure VM
How to turn Microsoft Azure VM off at night
有一段时间(我想超过一年)我从一个人那里听说有可能在特定时间自动将您的 VM 在 Microsoft azure 中打开并在特定时间打开它。所以我想,我可以使用这种机制在晚上关闭我的 Owncloud 服务器,因为我反正不使用它,它可以减少账单。但是现在当我在 Microsoft Azure 面板中时,我无法在任何地方找到这个选项......有人可以给我指出一些关于这个功能的信息吗?我真的很乐意提供所有帮助。
可以,但需要 Azure cmdlet 脚本作业。
请查看 link 以获取逐步介绍:http://clemmblog.azurewebsites.net/using-azure-automation-start-und-stop-virtual-machines-schedule/
作为解决方法,如果您的任务不需要在 VM 中,您可以考虑使用 Azure Scheduler 进行简单作业。它工作起来非常可靠。 https://msdn.microsoft.com/en-us/library/azure/dn495651.aspx
您可以按照以下步骤实现:
- 登录 Azure 管理门户
- 创建一个新的 Runbook:添加 -> 应用服务 -> 自动化 -> Runbook -> 来自库。查找并 select 模板 "Azure Automation Workflow to Schedule stopping of all Azure Virtual Machines"
- 输入一些数据。在要求时创建一个新的自动化帐户
- 根据 coadministrator privileges
的现有用户创建新的 Windows PowerShell 凭据
- 编写 Runbook 编辑凭据名称和 Azure 订阅名称
- 测试并发布 Runbook
- 添加新的时间表并根据您的需要进行配置
与我们使用它自动关闭 VM 的方式相同,我们可以用它来打开它。 on/off 中描述了详细的转动步骤 here。
有几种选择:
- 编写一个简单的 azure power shell 脚本并在指定时间将其自动化到 运行。
- 如果您只在远程会话需要时 运行 需要您的虚拟机 - 请尝试 http://usevm.com1。这是一个允许您轻松管理 Azure 中的 VM 的网站,包括关闭它们。
应用暂不支持自动切换,但有计划。
1.我在 usevm.com
工作
我也 运行 遇到自动关闭 Linux 虚拟机的问题:我不希望它按计划进行,而是我希望虚拟机在我不使用时解除分配。为了实现这一点,我编写了一个脚本来为我完成。脚本如下,I also wrote a blog about setting it up and using it.
该脚本主要检查虚拟机是否已启动至少 10 分钟,以及最后一个 SSH 连接是否至少在 15 分钟前关闭(尽管您可以调整时间)。如果满足这些条件,它将取消分配 VM。该脚本要求它有权访问 Azure 服务主体以管理 Azure 中的资源管理器 VM,并且应该在每分钟左右的 cron 作业中配置为 运行。
#!/bin/bash
### SCRIPT CONFIGURATION PARAMETERS
SPNAME="<spNameGUID>"
TENANT="<tenantGUID>"
PASSWORD=`cat pass.txt`
VMNAME=`cat /etc/hostname`
RESOURCEGROUP="${VMNAME}"
SSHTIMEOUT=15
MINSYSUPTIMEMS=600000
TEMPDIR=/tmp/autoshutdown
TEMPFILE="${TEMPDIR}/timetest"
### END SCRIPT CONFIGURATION PARAMETERS
UPTIME=`awk '{print *1000}' /proc/uptime`
NUMSSHCONNS=`ps auxwww | grep sshd: | grep -v grep | wc -l`
function dologin {
azure login -u "${SPNAME}" -p `cat pass.txt` --service-principal --tenant "$TENANT"
}
function dodeallocate {
echo "Deallocating VM..."
dologin
azure vm deallocate $RESOURCEGROUP $VMNAME
exit
}
while test $# -gt 0
do
case "" in
--test)
echo "Testing azure login..."
dologin
exit $?
;;
--force)
echo "Shutting down vm without testing parameters..."
dodeallocate
exit $?
;;
esac
shift
done
# If there are SSH connections, write the tempfile and exit
if [ $NUMSSHCONNS -gt 0 ]; then
mkdir -p $TEMPDIR
touch $TEMPFILE
exit 0
fi
# Check the system uptime, and the time of the last SSH connection
if [ $UPTIME -gt $MINSYSUPTIMEMS ] && test `find ${TEMPFILE} -mmin +${SSHTIMEOUT}`; then
dodeallocate
exit $?
fi
有一段时间(我想超过一年)我从一个人那里听说有可能在特定时间自动将您的 VM 在 Microsoft azure 中打开并在特定时间打开它。所以我想,我可以使用这种机制在晚上关闭我的 Owncloud 服务器,因为我反正不使用它,它可以减少账单。但是现在当我在 Microsoft Azure 面板中时,我无法在任何地方找到这个选项......有人可以给我指出一些关于这个功能的信息吗?我真的很乐意提供所有帮助。
可以,但需要 Azure cmdlet 脚本作业。
请查看 link 以获取逐步介绍:http://clemmblog.azurewebsites.net/using-azure-automation-start-und-stop-virtual-machines-schedule/
作为解决方法,如果您的任务不需要在 VM 中,您可以考虑使用 Azure Scheduler 进行简单作业。它工作起来非常可靠。 https://msdn.microsoft.com/en-us/library/azure/dn495651.aspx
您可以按照以下步骤实现:
- 登录 Azure 管理门户
- 创建一个新的 Runbook:添加 -> 应用服务 -> 自动化 -> Runbook -> 来自库。查找并 select 模板 "Azure Automation Workflow to Schedule stopping of all Azure Virtual Machines"
- 输入一些数据。在要求时创建一个新的自动化帐户
- 根据 coadministrator privileges 的现有用户创建新的 Windows PowerShell 凭据
- 编写 Runbook 编辑凭据名称和 Azure 订阅名称
- 测试并发布 Runbook
- 添加新的时间表并根据您的需要进行配置
与我们使用它自动关闭 VM 的方式相同,我们可以用它来打开它。 on/off 中描述了详细的转动步骤 here。
有几种选择:
- 编写一个简单的 azure power shell 脚本并在指定时间将其自动化到 运行。
- 如果您只在远程会话需要时 运行 需要您的虚拟机 - 请尝试 http://usevm.com1。这是一个允许您轻松管理 Azure 中的 VM 的网站,包括关闭它们。 应用暂不支持自动切换,但有计划。
1.我在 usevm.com
工作我也 运行 遇到自动关闭 Linux 虚拟机的问题:我不希望它按计划进行,而是我希望虚拟机在我不使用时解除分配。为了实现这一点,我编写了一个脚本来为我完成。脚本如下,I also wrote a blog about setting it up and using it.
该脚本主要检查虚拟机是否已启动至少 10 分钟,以及最后一个 SSH 连接是否至少在 15 分钟前关闭(尽管您可以调整时间)。如果满足这些条件,它将取消分配 VM。该脚本要求它有权访问 Azure 服务主体以管理 Azure 中的资源管理器 VM,并且应该在每分钟左右的 cron 作业中配置为 运行。
#!/bin/bash
### SCRIPT CONFIGURATION PARAMETERS
SPNAME="<spNameGUID>"
TENANT="<tenantGUID>"
PASSWORD=`cat pass.txt`
VMNAME=`cat /etc/hostname`
RESOURCEGROUP="${VMNAME}"
SSHTIMEOUT=15
MINSYSUPTIMEMS=600000
TEMPDIR=/tmp/autoshutdown
TEMPFILE="${TEMPDIR}/timetest"
### END SCRIPT CONFIGURATION PARAMETERS
UPTIME=`awk '{print *1000}' /proc/uptime`
NUMSSHCONNS=`ps auxwww | grep sshd: | grep -v grep | wc -l`
function dologin {
azure login -u "${SPNAME}" -p `cat pass.txt` --service-principal --tenant "$TENANT"
}
function dodeallocate {
echo "Deallocating VM..."
dologin
azure vm deallocate $RESOURCEGROUP $VMNAME
exit
}
while test $# -gt 0
do
case "" in
--test)
echo "Testing azure login..."
dologin
exit $?
;;
--force)
echo "Shutting down vm without testing parameters..."
dodeallocate
exit $?
;;
esac
shift
done
# If there are SSH connections, write the tempfile and exit
if [ $NUMSSHCONNS -gt 0 ]; then
mkdir -p $TEMPDIR
touch $TEMPFILE
exit 0
fi
# Check the system uptime, and the time of the last SSH connection
if [ $UPTIME -gt $MINSYSUPTIMEMS ] && test `find ${TEMPFILE} -mmin +${SSHTIMEOUT}`; then
dodeallocate
exit $?
fi