이 글은 주로 쉘 스크립트를 통해 자바 프로그램 jar을 실행하는 방법을 소개하는데, 편집자는 꽤 좋다고 생각해서 공유하고 참고하겠습니다. 편집기를 따라 살펴보겠습니다
UBuntu에서 프로젝트를 배포할 때 우리는 종종 쉘을 통해 프로그램을 시작하거나 심지어 crontab 예약 작업을 통해 정기적으로 Java 프로그램을 호출하기도 하는데 매우 이상한 문제는 예를 들어 I 다음과 같이 쉘 스크립트를 작성했습니다.
#!/bin/sh export mypath=/root/project/wishnomal java -Xmx3000m -Xms3000m -server -d64 -Dfile.encoding=UTF-8 -Dfetch.threads=300 -classpath $mypath/:$mypath/wish2-assembly-1.0.0.jar newstandard.CrawlerNewStandard $* echo "END"
명령줄에서 스크립트를 수동으로 실행하면 Java 프로그램은 정상적으로 실행되지만 crontab 예약 작업을 사용하면 아무런 효과가 없는 것 같습니다
가능한 원인 분석:
1 ) 현재 사용자에게 이 쉘 스크립트에 대한 실행 권한이 없는지 여부, ls -lrt /apps/service/mtk/checking/run.sh를 통해 스크립트가 실행 가능하지만 실행 권한 -rwxr-xr-x
을 가지고 있는지 확인하십시오. 2 ) 스크립트만 단독으로 실행해도 문제가 없는데 타이밍 문제는 아닐까요? 그래서 간단한 출력 쉘 스크립트를 작성했는데 타이밍에는 문제가 없었습니다. 문제는 여전히 스크립트에 있습니다.
나중에 인터넷으로 확인해보니 스크립트에 환경변수가 있는 게 아닐까 생각했는데, crontab을 통해 스크립트를 실행할 때 현재 사용자가 아닌 루트 사용자가 사용되기 때문에 /etc/profile을 사용하여 환경을 확인합니다.
가능한 원인 분석:
1) 현재 사용자에게 이 쉘 스크립트에 대한 실행 권한이 없는지 여부 ls -lrt /apps/service/mtk/checking/run을 사용하십시오. sh 스크립트가 실행 가능하지만 실행 권한이 있는지 확인하려면 - rwxr-xr-x
2) 스크립트만 단독으로 실행해도 문제가 없으니 타이밍 문제인가요? 그래서 간단한 출력 쉘 스크립트를 작성했는데 타이밍에는 문제가 없었습니다. 문제는 여전히 스크립트에 있습니다.
나중에 인터넷으로 확인해보니 스크립트에 환경변수가 있는 게 아닐까 생각했는데, crontab을 통해 스크립트를 실행할 때 현재 사용자가 아닌 루트 사용자가 사용되기 때문에 /etc/profile을 사용하여 환경을 확인합니다.
#!/bin/sh export mypath=/root/project/wishnomal export JAVA_HOME=/root/lib/jdk1.7.0_72 PATH=$PATH:$JAVA_HOME/bin java -Xmx3000m -Xms3000m -server -d64 -Dfile.encoding=UTF-8 -Dfetch.threads=300 -classpath $mypath/:$mypath/wish2-assembly-1.0.0.jar newstandard.CrawlerNewStandard $* echo "END"
export는 사용자 환경 변수로 내보낸 환경 변수를 표시합니다
이렇게 하면 crontab 예약 작업이 정상적으로 이루어집니다.
수정 참고 사항:
#!/bin/sh # ----------------------------------------------------------------------------- # Start script for the CMGP BOSSCONTROL # # $Id: run_bosscontrol.sh,v 1.0 2007/11/06 Exp $ # ----------------------------------------------------------------------------- #指定字符集 LANG=zh_CN.GBK export LANG RUN_HOME=. CLASSPATH=$CLASSPATH:$RUN_HOME/lib/checking.jar CLASSPATH=$CLASSPATH:$RUN_HOME/lib/ojdbc14.jar CLASSPATH=$CLASSPATH:$RUN_HOME/lib/commons-dbutils-1.1.jar CLASSPATH=$CLASSPATH:$RUN_HOME/lib/log4j-1.2.14.jar CLASSPATH=$CLASSPATH:$RUN_HOME/lib/dom4j-1.6.jar export CLASSPATH java com.**.checking.Checking_Start >> log.out &
명령줄에서 스크립트를 수동으로 실행하면 Java 프로그램이 정상적으로 실행되지만 crontab 예약 작업을 사용하면 아무런 효과가 없는 것 같습니다. 이유를 확인하고 분석해 보세요. 이유:
1) 현재 사용자에게 이 쉘 스크립트에 대한 실행 권한이 없는지 여부를 확인하려면 ls -lrt /apps/service/mtk/checking/run.sh를 사용하여 스크립트가 실행 가능하지만 실행 권한이 있는지 확인하십시오. -rwxr-xr -x
2) 스크립트만 단독으로 실행해도 문제가 없는데 타이밍 문제인가요? 그래서 간단한 출력 쉘 스크립트를 작성했는데 타이밍에는 문제가 없었습니다. 문제는 여전히 스크립트에 있습니다.
나중에 온라인으로 확인해 보니 스크립트에 환경 변수가 있는 이유가 아닐까 생각했는데, crontab을 통해 스크립트를 실행할 때 현재 사용자 대신 루트 사용자가 사용되기 때문에 /etc/profile을 cat하여 확인합니다.
#!/bin/sh # ----------------------------------------------------------------------------- # Start script for the CMGP BOSSCONTROL # # $Id: run_bosscontrol.sh,v 1.0 2007/11/06 Exp $ # ----------------------------------------------------------------------------- export PATH=/apps/usr/java/jdk1.5/bin:$PATH export JAVA_HOME=/apps/usr/java/jdk1.5 export JRE_HOME=/apps/usr/java/jdk1.5/jre export CLASSPATH=/apps/usr/java/jdk1.5/lib:/apps/usr/java/jdk1.5/jre/lib:$CLASSPATH RUN_HOME=/apps/service/checking CLASSPATH=$CLASSPATH$RUN_HOME/lib/checking.jar CLASSPATH=$CLASSPATH:$RUN_HOME/lib/ojdbc14.jar CLASSPATH=$CLASSPATH:$RUN_HOME/lib/commons-dbutils-1.1.jar CLASSPATH=$CLASSPATH:$RUN_HOME/lib/log4j-1.2.14.jar CLASSPATH=$CLASSPATH:$RUN_HOME/lib/dom4j-1.6.jar export CLASSPATH=$CLASSPATH java com.**.checking.Checking_Start >> log.out &
export는 사용자 환경 변수로 내보낸 환경 변수를 표시합니다.
위 jar 패키지는 eclipse 도구 내보내기를 통해 내보내지며 MANIFEST.MF 파일을 포함하지 않습니다. . 패키징 도구 Ant를 사용하면 .xml 파일에 기본 빌드 Set Class-Path를 패키징할 수 있습니다
manifest.mf 파일에 타사 jar 패키지를 추가하고 기본 프로그램 클래스를 지정합니다
build.xml에 다음 콘텐츠를 추가하세요.
<!-- create a property containing all .jar files, prefix lib/, and seperated with a space --> <pathconvert property="libs.project" pathsep=" "> <mapper> <chainedmapper> <!-- remove absolute path --> <flattenmapper /> <!-- add lib/ prefix --> <globmapper from="*" to="lib/*" /> </chainedmapper> </mapper> <path> <!-- lib.home contains all jar files, in several subdirectories --> <fileset dir="${lib.dir}"> <include name="**/*.jar" /> </fileset> </path> </pathconvert>
또한 매니페스트 파일 생성에 다음을 추가하세요.
<!-- 这样就可以将第三方jar包加入 --> <attribute name="Class-Path" value="${libs.project}" /> <!-- 程序运行的主类 --> <attribute name="Main-Class" value="com.**.checking.Checking_Start " />
이 방법으로 ant를 실행하면 결과 jar 패키지에 있는 MANIFEST.MF의 콘텐츠는 다음과 같습니다.
Manifest-Version: 1.0 Ant-Version: Apache Ant 1.7.0 Created-By: 1.5.0_09-b01 (Sun Microsystems Inc.) Implementation-Title: fee task Implementation-Version: 1.0 Implementation-Vendor: Aspire Main-Class: com.aspire.cmgp.flowcontrol.server.FlowControlServer Class-Path: lib/cmgp-util-1.0.1.jar lib/commons-codec-1.3.jar lib/comm ons-collections.jar lib/commons-dbcp-1.2.1.jar lib/commons-httpclient .jar lib/commons-logging.jar lib/commons-pool-1.2.jar lib/dom4j.jar l ib/log4j.jar lib/ojdbc14.jar
이렇게 하면 쉘 스크립트에서 프로그램이 요구하는 jar를 지정할 필요가 없습니다. 포함되어 있으면 환경 변수를 설정하는 번거로운 문제가 발생하지 않습니다. 이것이 더 공식적인 것들이 작동하는 방식입니다.
셸에서 jar 패키지를 직접 실행하세요. java -jar main program.jar -Xmx1024m -Xms1024m -Xmn512m,
source /etc/profile
source ~/ .bash_profile 뒤에
#!/bin/bash를 추가하세요.
테스트해 보세요. .
#! /bin/sh export JAVA_HOME=/usr/java/jdk1.6.0_18 export CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar for i in lib/*.jar; do CLASSPATH=$i:${CLASSPATH} done export CLASSPATH=.:${CLASSPATH}
java -cp ${CLASSPATH} 메인 메소드가 위치한 패키지 이름
위 내용은 쉘 스크립트는 Java 프로그램 jar 실행 방법을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.

이 기사에서는 분산 응용 프로그램을 구축하기위한 Java의 원격 메소드 호출 (RMI)에 대해 설명합니다. 인터페이스 정의, 구현, 레지스트리 설정 및 클라이언트 측 호출을 자세히 설명하여 네트워크 문제 및 보안과 같은 문제를 해결합니다.

이 기사는 네트워크 통신을위한 Java의 소켓 API, 클라이언트 서버 설정, 데이터 처리 및 리소스 관리, 오류 처리 및 보안과 같은 중요한 고려 사항에 대해 자세히 설명합니다. 또한 성능 최적화 기술, i

이 기사에서는 맞춤형 Java 네트워킹 프로토콜을 작성합니다. 프로토콜 정의 (데이터 구조, 프레임, 오류 처리, 버전화), 구현 (소켓 사용), 데이터 직렬화 및 모범 사례 (효율성, 보안, Mainta를 포함합니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.
