升级 Windiows 2012 引起 MDT 的两个路径错误
1、MDT 的默认安装路径:c:\Program Files\Microsoft Deployment Toolkit
以前的安装路径改成:E:\Microsoft Deployment Toolkit
2、升级了系统到 Windows 2012 以后,发现 MDT(版本为 2012.1),发现不能用了。错误提示:
Initialization Error PowerShell is required to use the Deployment Workbench. Please install PowerShell then relaunch Deployment Workbench.
网上给出的两个说法,都不靠谱:
(1)没有安装 Powershell。本来就已经安装了。
(2)设置执行策略:Set-ExecutionPolicy RemoteSigned -Scope CurrentUser。执行了,问题依旧。
3、做了一个错误的决定,修复 MDT。
4、修复以后, 错误变了。
未能加载文件或程序集“Microsoft.BDD.Workbench, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”或它的某一个依赖项。系统找不到指定的文件。
但是,它并没有提供更多的信息,是哪一个文件未找到。于是,准备用进程监视程序进行跟踪。但是(又是但是),事无凑巧难成书,程序一运行就崩溃。于是,只能瞎找了。
5、事实上,也找到了。有两个地方:
(1)HKLM\SOFTWARE\Microsoft\MMC\SnapIns\FX:{ffb8695a-66b4-4929-abb6-15cb8bd2ae3d}
其中的路径全是 c:\Program Files\Microsoft Deployment Toolkit。改吧。于是,把 C:\ 改成了 E:\。但是,又没改全。没有把 Program Files\,这是后来才发现的。
(2)HLM\SOFTWARE\Microsoft\Deployment 4
其中有一个 Install_Dir。
它是控制修复时的安装路径的。这是一个意外的收获。
当然了,也未改对。
6、结论:
经过 N 多次的检查,与几乎是毫无意义的网上查找,终于发现是多了一个 Program Files\。
(1)去掉 5.1 中的 Program Files\,终于又出现了 2 的错误;
(2)去掉 5.2 中的 Program Files\,一切正常了。
细心是多么的重要,但是,熟视无睹又多么难以克服。
通过使用apache_commons_daemon,可以让Java程序在unix系统上以服务器的方式运行。
当然,通过wrapper也是可以达到这样的目的,wrapper还可以指定java应用中用到的第三方jar目录,由wrapper统一加载,很方便。详细使用方法见“wrapper在unix下的使用”。
apache daemon的安装与使用
1、运行环境:
unix 64bit
jre 1.6.x
apache commons daemon 10.15,daemon较低的版本在安装上会有些差别,如:无法在64位的unix系统上找到libcap*.so文件等
而10.15版本在这方面增加了一些校验,使用起来比较方便。
2、安装jsvc
jsvc是apache commons daemon自带的,通过jsvc我们才可以达到java程序在unix系统上以service的方式运行,如:tomcat
首先,我们先下载apache commons daemon jar包和源码,下载地址:
http://commons.apache.org/proper/commons-daemon/download_daemon.cgi
源码中包含了jsvc和一些demo。
开始安装:
#cd /home/jsvc/
#tar zxvf commons-daemon-1.0.15-src.tar.gz
#cd commons-daemon-1.0.15-src/native/unix
#chmod 755 ./support/buildconf.sh
#./support/buildconf.sh
./support/buildconf.sh: configure script generated successfully
# ./configure --with-java=/usr/java/jdk1.6.0_35
.....
*** All done ***
Now you can issue "make"
#make
至此jsvc已经安装成功,接下来我们编写一个java app
3、编写一个java demo:
package com.jason.jsvc; import org.apache.commons.daemon.Daemon; import org.apache.commons.daemon.DaemonContext; import org.apache.commons.daemon.DaemonInitException; /** * @date 2013-6-21 * @author Jason */ public class JsvcTest implements Daemon { /* (non-Javadoc) * @see org.apache.commons.daemon.Daemon#destroy() */ @Override public void destroy() { // TODO Auto-generated method stub System.out.println("JsvcTest destory method..."); } /* (non-Javadoc) * @see org.apache.commons.daemon.Daemon#init(org.apache.commons.daemon.DaemonContext) */ @Override public void init(DaemonContext ctx) throws DaemonInitException, Exception { // TODO Auto-generated method stub System.out.println("JsvcTest init method..."+ctx.toString()); } /* (non-Javadoc) * @see org.apache.commons.daemon.Daemon#start() */ @Override public void start() throws Exception { // TODO Auto-generated method stub System.out.println("JsvcTest start method..."); } /* (non-Javadoc) * @see org.apache.commons.daemon.Daemon#stop() */ @Override public void stop() throws Exception { // TODO Auto-generated method stub System.out.println("JsvcTest stop method..."); } }
将该demo打包成jscv_test.jar,并连同commons-daemon-10.15.jar一起放到:/home/jsvc/app/目录下备用。
4、编写jsvc脚本
vi /etc/init.d/jsvc
#!/bin/sh # # chkconfig: - 60 50 # description: test a daemon. # processname: jsvc # Source function library. . /etc/rc.d/init.d/functions RETVAL=0 prog="jsvc" JAVA_HOME=/usr/java/jdk1.6.0_35 APP_HOME=/home/jsvc/app #jsvc所在的目录 DAEMON_HOME=/home/jsvc/native/unix APP_USER=root TMP_DIR=/home/jsvc/app/tmp PID=/home/jsvc/app/jsvc_stat.pid CLASSPATH=$CLASSPATH:/home/jsvc/app/jsvc_test.jar:/home/jsvc/app/commons-daemon-1.0.15.jar case "$1" in start) # # Start Serivce # $DAEMON_HOME/jsvc -user $APP_USER -home $JAVA_HOME -Djava.io.tmpdir=$TMP_DIR -wait 5000 -pidfile $PID -outfile $APP_HOME/log/jsvc.out -errfile '&1' -cp $CLASSPATH com.jason.jsvc.JsvcTest # # To get a verbose JVM #-verbose \ # To get a debug of jsvc. #-debug \ exit $? ;; stop) # # Stop Serivce # $DAEMON_HOME/jsvc -stop -pidfile $PID com.jason.jsvc.JsvcTest exit $? ;; *) echo "Usage myjsvc start/stop" exit 1;; esac
5、为unix添加服务
chmod 777 /etc/init.d/jsvc
chkconfig --add jsvc
chkconfig --list | grep jsvc
chkconfig --level 345 jsvc on
6、启动与关闭jsvc服务
service jsvc start
service jsvc stop
查看脚本中指定的日志目录,会发现一些日志输出:
JsvcTest init method...org.apache.commons.daemon.support.DaemonLoader$Context@6d9efb05
JsvcTest start method...
JsvcTest stop method...
JsvcTest destory method...
在linux中启动crontab服务:
/etc/init.d/crond start
crontab的命令格式
crontab -l 显示当前的crontab 文件(默认编写的crontab文件会保存在 (/var/spool/cron/用户名 例如: /var/spool/cron/roger)
crontab -r 删除当前的crontab (谨慎使用此方法,因为将会把所有的计划任务全部删除)
crontab -e 使用编辑器编辑当前的crontab文件
crontab 的文件格式:
minutes hour day-of-month month-of-year day-of-week commands
例如:
0 4 * * 2,5 /usr/bin/wall</etc/motd
*************解释:每周的周二和周五广播 /etc/motd中的信息************************************************
*/2 12-14 * 3-6,9-12 1-5 bash_scripts
*******************解释:每年的3-6月份,以及9-12月份的周一到周五的下午12-14点,每隔两分钟执行一个脚本*****
crontab的配置文件放在 /etc/crontab中