使用 CustomScript 扩展程序自动执行 Linux 虚拟机自定义任务
NingKuangWSSC
WS ARD 高级项目经理

您可能已经从Windows扩展程序博客中了解了针对
Windows 虚拟机的 CustomScript扩展程序,现在的好消息是,这一扩展程序也已面向
Linux虚拟机提供。
在上一篇博客中还介绍了
cloud-init,通过 cloud-init可以在
Azure Linux虚拟机配置期间向虚拟机插入脚本或元数据。CustomScript扩展程序则提供了更多功能,它可在虚拟机配置期间或配置之后运行您的脚本;而且还可以在
Azure支持的任何 Linux虚拟机上运行。
CustomScript能为您做什么?
在 Azure上创建
Linux虚拟机后,您可能需要在虚拟机上部署您的工作负荷(Web服务器、数据库等),理想情况下这可以通过一系列脚本来完成。
CustomScript扩展程序可自动从您指定的位置下载这些脚本,并使用您输入的参数执行脚本。
只要在您的虚拟机上安装相应的脚本解译器,CustomScript扩展程序便可支持以
Linux系统下任何脚本语言(Python、Linux
Shell 脚本语言等)编写的脚本。您可以在虚拟机配置期间安装并配置 CustomScript扩展程序,也可以选择在配置之后的任何时间进行。
先决条件
微软 Azure Linux代理
2.0.5或更高版本。建议更新到最新版本。请注意,大多数 Azure虚拟机
Linux镜像库都包含 2.0.5版本。您可以通过运行waagent -version来确认此版本已安装在虚拟机中。为保证扩展程序最佳用户体验,建议按照本文结尾“其他注意事项”中的步骤更新到最新版本。Azure PowerShell。请注意,针对扩展程序的跨平台
CLI 支持有望在未来几周内推出。
您希望运行的脚本。确保脚本已上传至 Azure Blob存储或
Github 位置。
部署 CustomScript扩展程序
您可以通过 Azure PowerShell、xPlat脚本或
Azure 门户网站来部署扩展程序。在本文中,我们将重点介绍通过 Azure PowerShell部署扩展程序的过程。有关脚本中
API的参考信息,请单击此处查看。
首先,确保您已经安装 Azure PowerShell。根据您的脚本的存储位置,有两个选项来部署扩展程序并运行您的脚本。
运行存储在 Azure Blob存储中的脚本
1. 用户编写脚本并将其上传至一个
Azure Blob 位置。
2. 在虚拟机配置期间或配置后将扩展程序添加至虚拟机中。
3.输入脚本的
Azure Blob 位置及其他可选参数。
4. 扩展程序将脚本下载到虚拟机上。
5.扩展程序按照用户指定的参数启动脚本。
<span style="font-size:14px;"><span style="font-size:14px;"><span style="font-size:14px;">#指定虚拟机,输入 Azure 存储帐户名和密码
$vm = Get-AzureVM -ServiceName ‘MyServiceName’ -Name ‘MyVMName’
$PrivateConfiguration = '{"storageAccountName":"MyAccount","storageAccountKey":"Mykey"}'
#指定脚本在 Azure Blob 中的位置,并指定要执行的命令
$PublicConfiguration = '{"fileUris":["http://MyAccount.blob.core.windows.net/vhds/MyShellScript.sh"], "commandToExecute":"sh MyShellScript.sh" }' #将扩展程序部署到虚拟机上,选择扩展程序的最新版本
$ExtensionName = 'CustomScriptForLinux'
$Publisher = 'Microsoft.OSTCExtensions'
$Version = '1.1'
Set-AzureVMExtension -ExtensionName $ExtensionName -VM $vm -Publisher $Publisher -Version $Version -PrivateConfiguration $PrivateConfiguration -PublicConfiguration $PublicConfiguration | Update-AzureVM
</span></span></span>
运行存储在
GitHub 中的脚本
1. 用户编写脚本,并将其上传至
GitHub。
2. 在虚拟机配置期间或配置之后将扩展程序添加至虚拟机中。
3. 输入脚本的
GitHub位置及其他可选参数。
4. 扩展程序将脚本下载到虚拟机上。
5. 扩展程序按照用户指定的参数启动脚本。
<span style="font-size:14px;"><span style="font-size:14px;"><span style="font-size:14px;">#指定虚拟机
$vm = Get-AzureVM -ServiceName ‘MyServiceName’ -Name ‘MyVMName’
#指定脚本的位置,并指定要执行的命令
$PublicConfiguration = '{"fileUris":["https://github.com/MyProject/Archive/MyPythonScript.py"], "commandToExecute":"python MyPythonScript.py" }' #将扩展程序部署到虚拟机上,选择扩展程序的最新版本
$ExtensionName = 'CustomScriptForLinux'
$Publisher = 'Microsoft.OSTCExtensions'
$Version = '1.1'
Set-AzureVMExtension -ExtensionName $ExtensionName -VM $vm -Publisher $Publisher -Version $Version -PublicConfiguration $PublicConfiguration | Update-AzureVM
</span></span></span>
查询结果
CustomScript扩展程序部署完毕即开始执行用户脚本。
执行结果可通过 Azure PowerShell Cmdlet“Get-AzureVM”或“Get-Deployment”进行检索。您也可以通过xPlat脚本和
Azure 门户网站(即将推出)查看状态。您可以在 /var/log/azure/Microsoft.OSTCExtensions.CustomScriptForLinux/1.0/extension.log中找到
CustomScript扩展程序的日志文件。请注意,用户脚本的标准输出也将体现在该日志文件中。
其他注意事项
如果您有多个脚本,您可以编写一个可调用相关脚本的入口点脚本,然后将该入口点脚本、相关脚本和任何其他相关二进制文件上传至存放脚本的位置(Azure
Blob存储 或
GitHub)。扩展程序设计用于在虚拟机创建之后处理一次性任务。如果使用相同的配置第二次调用该扩展程序,则该扩展程序将不会执行您所指定的脚本。不过,如果您确实需要多次运行
CustomScript 扩展程序,您可以通过变换不同的配置来运行。例如:
1. 更改您的脚本的名称。
2. 使用以下代码添加一个时间戳作为
[PublicConfiguration]参数:
<span style="font-size:14px;"><span style="font-size:14px;"><span style="font-size:14px;">#生成当前时间戳,添加至配置中,这可确保每次运行 CustomScript 扩展程序时都采用不同的配置
$TimeStamp = (Get-Date).Ticks
$PublicConfiguration = '{"fileUris":[“MyAccount.blob.core.windows.net/vhds/MyShellScript.sh”], "commandToExecute":"sh MyShellScript.sh", “timestamp”:“' + $TimeStamp + '“}
</span>
<span style="font-family:Times New Roman;font-size:14px;color:#000000;"></span></span></span>
更新到WALA2.0.8的方法
从Github下载
WALA2.0.8 的源代码# wgethttps://raw.githubusercontent.com/Azure/WALinuxAgent/WALinuxAgent-2.0.8/waagent
为waagent文件添加“可执行”的权限
# chmod +x waagent
替换 /usr/sbin/目录下的waagent文件
# cp waagent /usr/sbin
重启waagent服务
# service waagent restart
(如果你使用的是Ubuntu,需要将上述命令中的“waagent”替换为“walinuxagent”)
注意:1.如需要更新到其他版本,请参看GitHub说明。2.运行以上命令需要Root权限。
使用 CustomScript 扩展程序自动执行 Linux 虚拟机自定义任务的更多相关文章
- 使用自定义脚本扩展程序自动执行 VM 自定义任务
在 Build 开发者大会上推出VM 扩展程序的其中一个称为"自定义脚本扩展程序",它支持 PowerShell.如果这是您第一次访问这些博客,可能需要查看以前的博客,请单击 ...
- 如何让PHP程序自动执行(后台)
如何让php程序自动执行,这个就需要用到一个函数了: int ignore_user_abort ( [bool setting] ) 定义和用法 ignore_user_abort() 函数设置与 ...
- 使用 Chef 自动执行 Azure 虚拟机部署
Chef 是一个强大的工具,用于提供自动化和所需的状态配置. 使用我们的最新 cloud-api 版本,Chef 提供了与 Azure 的无缝集成,使得你能够通过单个命令设置和部署配置状态. 在本文中 ...
- 写一段java程序来执行linux命令
摘要 在日常开发中,程序员需要经常查询服务器日志来排查问题和调试程序.如果是本地调试还好,但项目一旦发布到服务器上,每次查日志就很麻烦,而且日志量巨大,有时我们无法找到我们需要的信息.经常需要借助第三 ...
- Windows 通过批处理自动执行 linux服务器上面命令的办法
1. 使用putty 下载地址 https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 直接使用 exe版本就可以 https:/ ...
- android 应用程序中执行Linux 命令
ADB 无线调试命令son = "setprop service.adb.tcp.port 5555\n" + "stop adbd\n" + "st ...
- 在Python程序中执行linux命令
import commands print commands.getstatusoutput('ls') 输出: (0, '1.py\nwork.nfs') 参考文档: https://blog.cs ...
- Delphi结构体的扩展,可以自动初始化,反初始化,自定义拷贝函数.
转载:http://www.raysoftware.cn/?p=518&utm_source=tuicool 恭贺Delphi XE7诞生,Delphi XE7在编译器内部集成了我之前所实现的 ...
- 使用 VMAccess 扩展程序重置 Linux 虚拟机的登录凭据
Ning KuangWSSC WS ARD高级项目经理 您是否曾经因为忘记 Azure VM 密码或 SSH密钥而导致无法访问 VM?VMAccess扩展程序使您可以重置密码.SSH密钥或 SSH ...
随机推荐
- 关于配置tnsnames来使用PLSQL连接数据库
关于配置tnsnames来使用PLSQL连接数据库 要想用ORACLE SQLdeveloper或者第三方工具PLSQLdeveloper.Toad等连接ORACLE数据库,必需要配置TNSnames ...
- Android(java)学习笔记226:服务(service)之为什么使用服务
1.服务 service 长期在后台运行的进程,一般没有应用程序界面 2.进程线程和应用程序之间的关系 应用程序开启,系统启动一个Linux进程,所有的组件都是运行在同一个进程的同一个线程(mai ...
- 如何解决eclipse上的Android程序“Please ensure that adb is correctly located at 'D:\eclipse\sdk\platform-tools\adb.exe' and can be executed.”小问题?
首先,把运行的Android模拟器和eclipse一块儿关了, 然后win+R,cmd, 下面输入adb kill_server 再输入adb start_server 之后重新运行项目,不出意外的话 ...
- Android关闭系统锁屏
昨晚探索了一下Android系统内的目录,意外发现系统锁屏的数据库 使用adb shell进入系统根目录 adb shell su sqlite3 data/system/locksettings.d ...
- Windows Azure上的Odoo(OpenERP)
OpenERP 改名为 Odoo 了,感觉名字怪怪的.Windows Azure也进入国内了,学习了一段时间的Azure,把它门结合在一起搞搞吧!本系列文章不涉及开发,纯属环境搭建及Odoo 系统功能 ...
- Dhroid框架配置
1.将dhroid文件夹作为一个Module导入,dhroid下载地址 2.在build.gradle中的dependencies节点中添加compile project(':dhroid') dep ...
- sql - Invalid object name 'dbo.in$'
这是我从excel导入的表,用查询的时候,不加前面部分的'dbo',能查出来,好像是owner的原因吧.
- 字符串转换成JSON(js)
JSON.parse('{"site":"zlog"}'); 使用JSON.parse需严格遵守JSON规范, 属性都需用双引号引起来, 一定是双引号!! 相反 ...
- Ajax的原理和运行机制
关于ajax,是最近炒得非常火的一种技术,并且时下它也是非常流行.当然,它并不是什么新技术,而是在各种已有的技术和支持机制下的一个统一.在我的项目中,偶尔也会用到ajax,用来给用户一些无刷新的体验. ...
- javascript 中的nextSibling和previousSibling使用注意事项
JavaScript中的nextSibling和previousSibling和作用类似于jquery的next()和prev(),都是获取下一个/上一个同胞元素,如果下一个同级节点不存在,则此属性返 ...