如何在晚上关闭 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

有几种选择:

  1. 编写一个简单的 azure power shell 脚本并在指定时间将其自动化到 运行。
  2. 如果您只在远程会话需要时 运行 需要您的虚拟机 - 请尝试 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