linux下的脚本与java中的相对路径

背景:

linux使用ANT编译java类并部署到Tomcat下,然后使用脚本(deploy.sh)开启 Tomcat,脚本如下:

deploy.sh(其绝对路径为:/usr/local/myapp/deploy.sh)

1/usr/local/apache-tomcat-5.5.20/bin/shutdown.sh
2ant
3/usr/local/apache-tomcat-5.5.20/bin/startup.sh
4

其中各行的意义:

(1)关闭tomcat

(2)编译java类并部署到tomcat

(3)开启tomcat

这里使用的命令都是绝对路径运行的。

问题来了:

(1)在项目中安排了log4j的日志输出到myapp.log,其路径写 法:../log/myapp.log;启动服务器的时候在catalina.out中输出错误信息, 说../log/myapp.log没有找到。

(2)在程序中使用了output/files/,程序完成后很难才找到文件,因为其位 置并不像在window下调试时一样,最后使用 find  -name  output -type  d 命令才找到,发现原来这个文件夹所在的位置就是在:/usr/local/myapp/下面 。

倪端初现:

可见,使用脚本开启tomcat时如果以绝对路径的方式去开启的话,那么在程 序中的相对路径就会以脚本的当前目录作为路径的起始点。这样就导致了在文件 的位置上出现变化,使得文件管理出现困难甚至对已有的文件造成破坏。

时间: 2024-11-03 18:39:11

linux下的脚本与java中的相对路径的相关文章

linux 下shell脚本调用 (小白求教)

问题描述 linux 下shell脚本调用 (小白求教) Shell脚本怎么实现调用一个可执行文件并在脚本中执行该文件中的命令? (可执行文件打开后是命令行模式) 解决方案 啥意思?脚本里调用脚本?直接以廖本名调用啊 解决方案二: 这个是不是类似,在shell命令行窗口中打开另外一个命令行? 解决方案三: 用fork,system等,可以获取它的管道输出等 解决方案四: 文件中的命令? 没明白什么意思? 解决方案五: 可以尝试使用source函数................. 解决方案六:

Java中获取类路径classpath的简单方法(推荐)_java

如下所示: <SPAN style="FONT-SIZE: 18px"> System.out.println("++++++++++++++++++++++++"); String path = System.getProperty("java.class.path"); String path2 = FreeMarkerWriter.class.getProtectionDomain().getCodeSource().getLo

Linux下rar及zip压缩包中批量替换某文件脚本

本需求是自己负责的一个生产系统上,有大量以zip和rar结尾的压缩文件散落在文件系统的各个文件夹,先在需要把压缩包里包含某一个特定文件(如tftpd32.exe或Tftpd32.exe,版本较旧),全都替换成比较新的tftpd32.exe版本.压缩文件总数约5000个,需要替换的数量约1500个. 因为是生产环境,不敢轻易乱动,所以脚本考虑的因素就非常多,不允许中间执行过程出现异常,所以找到文件后实际执行替换操作之前做好备份,并且将操作过程记录日志. 以下几点需要考虑: 分别处理zip和rar文

Linux下使用脚本记录所有用户的操作

这个脚本是在网上找到的,稍微做了一些修改,可以实现在Linux下所有用户,不管是远程还是本地登陆,在本机的所有操作都会记录下来,并生成包含"用户/IP/时间"的文件存放在指定位置,方便管理员以后查看不同用户都在服务器上干了些什么! 目前这个代码只实现了记录用户的操作命令,但是像vi编辑只会记录vi这条命令,但是在文件里所修改的内容无法记录...有时间再研究一下! 将下面的代码追加到/etc/profile文件里即可 PS1="`whoami`@`hostname`:"

Linux下通过脚本自动备份Oracle数据库并删除指定天数前的备份_oracle

说明: Oracle数据库服务器 操作系统:CentOS IP:192.168.0.198 端口:1521 SID:orcl Oracle数据库版本:Oracle11gR2 具体操作: 1.root用户登录服务器 mkdir -p /backup/oracledata #新建Oracle数据库备份目录 chown -R oracle:oinstall /backup/oracledata -R #设置目录权限为oinstall用户组的oracle用户(用户oracle与用户组oinstall是在

Linux下安装并使用Java开发opencv的配置

inux编译安装opencv 首先, linux下安装opencv其实不麻烦的, 参考文档即可完成: http://docs.opencv.org/trunk/doc/tutorials/introduction/linux_install/linux_install.html 大致有以下几个步骤: 1) 安装gcc以及cmake等等乱七八糟的软件(不过ubuntu下默认差不多都有了吧-) sudo apt-get install build-essential python-dev cmake

Linux 下shell显示-bash-4.1$不显示用户名路径的解决方法

  Linux CentOS下shell显示-bash-4.1$不显示用户名路径的解决方法   问题描述:   CentOS下新增一个用户,登录进去之后shell脚本的信息如下:     而不是我们经常看到的username@hostname的组合,看起来很不舒服.   解决方案:   问题的原因是因为没有配置.bash_profile的问题,可以通过配置这个文件来解决问题.   1.在Terminal输入: vi ~/.bash_profile     2.如果没有.bash_profile可

Linux下Shell脚本中几种基本命令的替换区别_linux shell

Part 1 : ` command ` 这是 "命令标准输出作为函数标准输入" 操作方法之一,有很大的弊端以及不安全的地方. 缺点一:比较陈旧. 缺点二:容易与单引号混淆.(其实它是你键盘"!"左边那个键) Part 1.5 ` command``与 $(command) 俩者区别 直接看几张图吧,看这图解释他们区别... 大家可以看到俩种表达方式,分别是代表命令直接执行和嵌套执行. 我们发现:执行`` 和 $() 是相同的. 附,其实这里有个小bug...( 橙

Linux 下通过脚本实现远程自动备份

考虑到在本机上备份数据,一旦该机器硬盘出现故障,数据无法取出.远程手动备份数据费时费力且 不及时.最好的方法就是通过脚本实现远程自动互备.但远程无论是通过SSH登陆,还是通过scp拷贝文件 都需要输入密码.为了克服这个问题,首先需要实现不需要密码的SSH登陆,这样就可以使用rsync,scp ,rexec等命令来做的远程备份了. 1. 设置无需密码的ssh登陆,方法如下: 假设A,B两服务器,现在需要在A机上用root登陆B机,而不需要输入密码,那我们可按照下面的步骤 来做: 1)在A机上生成钥