标签 bat 下的文章

如果要问系统管理员最痛恨的事情是什么,我敢打赌,99%的回答不是遇到棘手的问题,也不是遇到莫名其妙的情况,而是给那些该死的 Windows 系统服务器打补丁——一个一个又一个,一台一台又一台,一遍一遍又一遍……生生不息、永无止境。

不要告诉我有 WSUS 这个玩意,我知道。这个鬼东西和域控制器建在一起,那简直就是地狱。至今我依然不记得在同一台服务器上应该先安装 WSUS,还是先搭建域控制器。总之它们俩必定有一个先后顺序,不然会影响对方——我很佩服微软,真的。

幸好伟大的 M$ 公司还有一个玩意叫做批处理脚本。下面这个脚本用于批量补丁,可以帮助系统管理员节约时间,减少白头发:

FOR %%i IN (*.EXE) DO %%i /passive /norestart /nobackup 脚本需要放在那一堆补丁中间,就像羊群中的狼一样。另外参数也可以根据实际情况调整。

前几天在一台 Windows 2003 Enterprise Edition 的机器上,突然运行不了这个脚本,提示:

Windows 无法访问指定设备、路径或文件。您可能没有合适的权限访问这个项目。 我以为我在做梦,或是眼睛模糊了。再次执行,还是一样;来到 CMD 下执行,也是一样,于是我被折服了。

看了 M$ 公司伟大的帮助文档后,才知道这样的情况乃是相当罕见。应该这样解决:

回到上层目录,右键补丁和 BAT 脚本所在的目录,选择“属性”,然后“安全”选项卡,点击下面的“高级”,选择“所有者”选项卡,选中“替换子容器及对象的所有者”,然后“应用”,接着切换到“审核”选项卡,选中“允许父项的继承审核项目传播到该对象和所有子对象。包括那些在此明确定义的项目”和“用在此显示的那些可以应用到子对象的项目替代所有子对象的审核项目”,点击“应用”,确定所有对话框,一切完成。

前段时间折腾了一个 SQL Server 数据库异地备份解决方案,使用了一些不够完美不够和谐的方法完成了设计需求。昨天看到一款软件叫做 NcFTP,经过思考,有了下面的优化方案。

原先的方案需要在双方服务器上安置批处理并加入计划任务,他们之间的先后顺序是没有握手联系的,只能依靠时间来排序。最佳途径应该还是只在一台服务器上安置批处理。原先需要在备份服务器上通过 curl 来 pull 当天的备份,现在有了 NcFTP,我们可以让数据库服务器主动 push 备份文件到备份服务器上。

@set ftp_ip=0.0.0.0
@set ftp_port=1234
@set ftp_user=this_is_ftp_user
@set ftp_passwd=this_is_ftp_passwd
@set ncftp_path=C:/Program Files/NcFTP

"%ncftp_path%ncftpput.exe" -u %ftp_user% -p %ftp_passwd% -P %ftp_port% %ftp_ip%/tmp.rar
而删除备份服务器上的旧备份文件,也可以抛弃 Henry Xu 同学用 C++ 写的程序了,可以使用 Resource kit 里的命令 FORFILES。

- 阅读剩余部分 -

一直以来,公司某游戏平台使用 SQL Server 作为数据存储解决方案。为了数据的安全,每天凌晨在本机上做一次备份。但随着时间的推移,原先并没有设计到备份需求的硬件配置,尤其是外部存储这块,已经快不能满足 SQL Server 备份文件日益丰满的身姿。(这句话好像谁说过?)

为了彻底解决这个病痛,我打算为其实施远程异地备份。但查阅无数资料,均找不到较好的解决之道。大部分方案都是在备份目的地建共享目录,新增一个用户并赋权。然后在数据库端写个存储过程,添加数据库维护计划并使用这个存储过程。这样做有太多弊端:对于操作系统来说,很不安全;对于硬件架构设计来说,必须满足同一内网的条件。于是乎,放弃这样的方案。

经过几天的折腾测试,最后我采用了这样的方案。虽然比较老土,但至少 DIY 出来了,也暂时性满足了需求,缓解了阶级矛盾:

1、打开 SQL Server 企业管理器,找到数据库维护计划。

2、添加一个数据库维护计划,为其设置一个优美而和谐的名字,并选择需要操作的数据库对象。

- 阅读剩余部分 -