Linux应用程序的Linux启动脚本

我有Jar文件使用此命令在Linux中运行:

java -jar SyslogAgent_01.jar 192.168.2.154 1998 D:/apachelog.log ApacheLog 13 

任何人都可以让我知道如何创build脚本并自动实现这个过程,当我们重新启动我们的电脑? 在Windows中,我们使用服务,但如何处理Linux? 你可以提供给我的脚本和步骤来做到这一点,因为我真的是新的Linux …

Linux:RHat,Ubuntu

谢谢

如果你想运行应用程序作为Linux守护进程(服务)签出Java包装: http : //wrapper.tanukisoftware.com/doc/english/download.jsp

也检查这个答案(是为Windows,但为Linux的一点点变化): 如何安装Java应用程序作为服务

虽然不建议sudo这样的项目,它可以通过以下来完成:

 sudo crontab -e 

在cron中放置以下内容:

 @reboot java -jar SyslogAgent_01.jar 192.168.2.154 1998 D:/apachelog.log ApacheLog 13 

我将从这个启动脚本模板开始,将SCRIPT_HOME重命名为正确的路径,并且不用任何扩展就调用这个文件,然后在SSH中运行这个命令。

 chkconfig –add javaserver 

注意在chkconfigjavaserver是你如何调用下面的文件,(没有扩展或它不会工作)。

 #!/bin/bash # # javaserver: Startup script for Any server Application. # # chkconfig: 35 80 05 # description: Startup script for Any server Application. SCRIPT_HOME=/var/java_server; export SCRIPT_HOME start() { echo -n "Starting Java server: " $SCRIPT_HOME/run.sh start sleep 2 echo "done" } stop() { echo -n "Stopping Java server: " $SCRIPT_HOME/run.sh stop echo "done" } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart) stop start ;; *) echo $"Usage: javaserver {start|stop|restart}" exit esac 

现在这里是脚本run.sh(这可以用来代替模板,但我发现更容易使模板脚本小而不可改变的链接到我的主要脚本,所以我再也不用碰它了。

下面的脚本是我发现的一个很少的脚本之一,实际上可以重新启动一个java程序而不关闭所有你正在运行的java程序,这个程序只针对它打开的程序,所以它不会犯任何错误,从来没有对我失败,运行在用户root没有问题。
永远在后台运行你的程序(不需要保持SSH打开)。

这是run.sh

 #!/bin/bash # # chkconfig: 345 99 05 # description: Java deamon script # # A non-SUSE Linux start/stop script for Java daemons. # # Set this to your Java installation JAVA_HOME=/usr/bin/ scriptFile=$(readlink -fn $(type -p $0)) # the absolute, dereferenced path of this script file scriptDir=$(dirname $scriptFile) # absolute path of the script directory serviceNameLo="javaserver" # service name with the first letter in lowercase serviceName="Javaserver" # service name serviceUser="root" # OS user name for the service serviceGroup="root" # OS group name for the service applDir="/var/java_server" # home directory of the service application serviceUserHome="/home/$serviceUser" # home directory of the service user serviceLogFile="/var/log/$serviceNameLo.log" # log file for StdOut/StdErr maxShutdownTime=15 # maximum number of seconds to wait for the daemon to terminate normally pidFile="/var/run/$serviceNameLo.pid" # name of PID file (PID = process ID number) javaCommand="java" # name of the Java launcher without the path javaArgs="MyJavaAppClass" # arguments for Java launcher javaCommandLine="$JAVA_HOME$javaCommand $javaArgs" # command line to start the Java service application javaCommandLineKeyword="MyJavaAppClass" # a keyword that occurs on the commandline, used to detect an already running service process and to distinguish it from others # Makes the file $1 writable by the group $serviceGroup. function makeFileWritable { local filename="$1" touch $filename || return 1 chgrp $serviceGroup $filename || return 1 chmod g+w $filename || return 1 return 0; } # Returns 0 if the process with PID $1 is running. function checkProcessIsRunning { local pid="$1" if [ -z "$pid" -o "$pid" == " " ]; then return 1; fi if [ ! -e /proc/$pid ]; then return 1; fi return 0; } # Returns 0 if the process with PID $1 is our Java service process. function checkProcessIsOurService { local pid="$1" if [ "$(ps -p $pid --no-headers -o comm)" != "$javaCommand" ]; then return 1; fi grep -q --binary -F "$javaCommandLineKeyword" /proc/$pid/cmdline if [ $? -ne 0 ]; then return 1; fi return 0; } # Returns 0 when the service is running and sets the variable $pid to the PID. function getServicePID { if [ ! -f $pidFile ]; then return 1; fi pid="$(<$pidFile)" checkProcessIsRunning $pid || return 1 checkProcessIsOurService $pid || return 1 return 0; } function startServiceProcess { cd $applDir || return 1 rm -f $pidFile makeFileWritable $pidFile || return 1 makeFileWritable $serviceLogFile || return 1 cmd="nohup $javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile" # Don't forget to add -H so the HOME environment variable will be set correctly. #sudo -u $serviceUser -H $SHELL -c "$cmd" || return 1 su --session-command="$javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1 sleep 0.1 pid="$(<$pidFile)" if checkProcessIsRunning $pid; then :; else echo -ne "\n$serviceName start failed, see logfile." return 1 fi return 0; } function stopServiceProcess { kill $pid || return 1 for ((i=0; i<maxShutdownTime*10; i++)); do checkProcessIsRunning $pid if [ $? -ne 0 ]; then rm -f $pidFile return 0 fi sleep 0.1 done echo -e "\n$serviceName did not terminate within $maxShutdownTime seconds, sending SIGKILL..." kill -s KILL $pid || return 1 local killWaitTime=15 for ((i=0; i<killWaitTime*10; i++)); do checkProcessIsRunning $pid if [ $? -ne 0 ]; then rm -f $pidFile return 0 fi sleep 0.1 done echo "Error: $serviceName could not be stopped within $maxShutdownTime+$killWaitTime seconds!" return 1; } function startService { getServicePID if [ $? -eq 0 ]; then echo -n "$serviceName is already running"; RETVAL=0; return 0; fi echo -n "Starting $serviceName " startServiceProcess if [ $? -ne 0 ]; then RETVAL=1; echo "failed"; return 1; fi echo "started PID=$pid" RETVAL=0 return 0; } function stopService { getServicePID if [ $? -ne 0 ]; then echo -n "$serviceName is not running"; RETVAL=0; echo ""; return 0; fi echo -n "Stopping $serviceName " stopServiceProcess if [ $? -ne 0 ]; then RETVAL=1; echo "failed"; return 1; fi echo "stopped PID=$pid" RETVAL=0 return 0; } function checkServiceStatus { echo -n "Checking for $serviceName: " if getServicePID; then echo "running PID=$pid" RETVAL=0 else echo "stopped" RETVAL=3 fi return 0; } function main { RETVAL=0 case "$1" in start) # starts the Java program as a Linux service startService ;; stop) # stops the Java program service stopService ;; restart) # stops and restarts the service stopService && startService ;; status) # displays the service status checkServiceStatus ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1 ;; esac exit $RETVAL } main $1 

呃首先,你可能想编辑出你的本地IP那更多的信息,你给出。 无论如何,只要打开一个新的文件类型这个

  #!/bin/bash #put your commands in here 

保存然后打开终端并输入chmod + x nameofscript

我不知道关于Ubuntu的,但在拱门上,我们有一个地方在启动时运行命令。 我的建议是转到system-> prefernces->启动应用程序或沿着该行的东西,我知道菜单。

输入脚本的路径,例如/ home / username / scrips / myawesomescript

基本上,您需要在/etc/init.d中创建一个小脚本文件,并将/etc/rc2.d和/etc/rc5.d的符号链接起来。 内容可能是这样的:

 #!/bin/sh if [ "$1" = start ] ; then cd /put_your_workdir_here /usr/bin/java -jar SyslogAgent_01.jar 192.168.2.154 1998 D:/apachelog.log ApacheLog 13 & fi 

请注意,您在后台启动程序(&在命令行结尾处)

你需要创建一个unix shell脚本文件,它会自动完成你的工作。 以下是创建脚本文件的步骤: http : //www.linuxquestions.org/questions/linux-general-1/shell-script-for-jar-utility-769461/