最近公司迁移服务器,从windows系统改为linux系统,里面有一些老程序是直接用bat文件启动的。
在linux中需要启动.sh文件才行,所以需要将bat文件改成sh文件才行
先粘出bat文件和sh文件,里面需要的jar包比较多我就删了一部分jar包
bat:
@echo offs
set lib=E:\newSpace\androidBass\lib
set CLASSPATH=.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar
set CLASSPATH=%CLASSPATH%;%lib%\activation-1.1.jar;%lib%\ant.jars-dbutils-1.1.jar
java main.DataMain
pause
sh:(因为新服务器系统jdk不是6,所以要给老工程指定一下JAVA_HOME)
#!/bin/sh
export JAVA_HOME=/Mobilebass/jdk6
export lib=/Mobilebass/SSJFDataSync/lib
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export CLASSPATH=$CLASSPATH:$lib/activation-1.1.jar:$lib/ant.jar:$lib/commons-codec-1.3.jar:$lib/commons-collections-3.1.jar
java main.DataMain
相同点:都是要设置一下CLASSPATH,里面把要引用的jar包全都引用进来
不同点:1.bat设置变量是用‘set’,而sh文件用‘export’;
2.bat的路径符号是'\',而bat是‘/’
3.bat文件分隔符是‘;’而sh是‘:’;
4.bat变量引用这么写 ‘%变量%’,而sh是 ‘$变量’
5.记得把文件名由.bat改为.sh
总得来说就这么多需要修改的东西,不过实际启动时还会有一些其他问题
问题一:报错找不到要启动的方法类
我遇到的这种问题一般是因为编码问题,windows和linux编码不同,直接修改并改名拷贝过来的文件由于编码不对无法运行
解决方法:把文件编码改成unix编码
先vim这个sh文件,敲 冒号 ,然后写这个
set ff=unix
然后 wq!保存退出即可
问题二:如何在后台运行并保存运行日志
1.在linux直接用 sh xx.sh 启动程序,只是在前台启动了程序,可以正常开到运行日志,但是这样就被限定在程序中无法再进行其他操作了,而且一旦ssh连接断开,程序运行也就停止了。这样就得让它在后台挂起运行,使前台还可以进行其他操作。
这就需要 nohup和&命令了
nohup是挂起的意思,就是启动后你还可以进行其他操作,但关闭ssh连接好像还是会停止程序
&是后台运行,一般需要俩一起配合使用
nohup sh xx.sh &
这样就可以正常后台运行了,ssh断开也没事了,不过前台运行按个 ctrl+c就停了,后台运行就只能直接杀进程才能停止了
我一般就用 ps -anp|grep 9000 查一下端口的进程,然后直接 kill 进程号
2.后台虽然启动了,在windows起码还有个小黑框可以看报错日志,linux上就没有显示日志的地方了,这样就得将程序在启动的时候将日志打印到一个文件中。
nohup sh xx.sh >> log.log &
这样就可以将日志打进 同目录 的log.log文件中,文件路径和文件名自己设置,文件没有的话它会自己创建,完了看报错信息的话直接看这个log文件就行了