前言
最近工作中,需要給一些在服務器運行的jar包服務設置開機自啓,防止服務器意外宕機重啓後,這些服務都不能正常使用。
方法
使用crontab
命令,設置開機自啓動任務。
注意:
1)通過cron.service定時服務來調用可執行文件時,cron是無法加載系統中的相關路徑設置的,因此在腳本文件中,相關路徑都要轉換爲絕對路徑。尤其jdk的路徑應當爲其安裝路徑。
2)在執行start java application流程時,我們應當通過cd命令,對系統運行目錄進行切換,以轉到相應服務目錄下。
1、爲.sh腳本文件添加權限
- 對於windows環境下編輯的.sh可執行文件,我們拷貝到linux環境後,在cron.service服務中是沒有權限執行該腳本的,但通過手動輸入:sh *.sh命令,是可以成功執行該腳本的,因此我們需要爲該腳本添加權限,以使其在Linux環境下爲可執行文件。
- 通過命令:
ls –l
,我們可以查看文件的相關屬性,下面的test.sh是非可執行文件,文件爲灰色。 - 通過命令:
chmod 744 test.sh
,我們就可以將test.sh
轉爲可執行文件,文件名爲綠色,同時x也代表該文件爲可執行文件。
2、編輯crontab定時任務
-
下面我們以root用戶爲例,來編輯crontab定時任務,對於root用戶,我們可以直接通過命令:
crontab –e
,打開crontab文件編輯器,點擊i
鍵,就可以對crontab文件進行編輯。
-
輸入命令:
@reboot /root/LinuxAutoStartProject_jar/test.sh
@reboot,指定服務器啓動時,cron.service定時任務會在該時間點執行相應的事務。
/root/LinuxAutoStartProject_jar/test.sh,指定了定時任務將要執行的任務,可以是相關Linux命令,也可以是相關可執行的腳本程序。 -
輸入命令後,按
esc
退出鍵,然後輸入:wq
鍵,保存crontab文件並退出。定時任務編輯成功並保存後,出現: crontab:installing new crontab
,則代表定時任務設定成功。
3、設置crond
服務開機自啓動
設置crond定時任務服務開機自啓,在 /etc/rc.d/rc.local
腳本中加入 /sbin/service crond start
即可
4、後臺運行jar包的腳本文件
#!/bin/bash
WORK_DIR="/root/app/app_jar"
JAR_NAME="app.jar"
MY_JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64/jre/bin/java"
HOST_IP="127.0.0.1"
pid=`ps -ef | grep $JAR_NAME | grep -v grep |awk '{print $2}'`
echo "===>pid:$pid"
if test -n "$pid"
then
ps -ef|grep $JAR_NAME|grep -v grep|awk '{print $2}'|grep $pid > /dev/null
if test $? -eq 0
then
echo "The process is running !\n"
exit 3
fi
fi
#Check process is existence
if [ ! -f $WORK_DIR/$JAR_NAME ] ; then
echo "Error: Can not find the file $WORK_DIR/$JAR_NAME,shik next shell"
exit 3
else
echo "$WORK_DIR/$JAR_NAME exist,go next"
fi
#start jar
echo "start java application"
cd $WORK_DIR
nohup $MY_JAVA_HOME -Djava.library.path=lib -Djava.rmi.server.hostname=$HOST_IP -Xms128m -Xms256m -XX:+UseParallelOldGC -XX:ParallelGCThreads=2 -jar $JAR_NAME > out.log 2>&1 &
5、nohup命令
nohup 命令運行由 Command參數和任何相關的 Arg參數指定的命令,忽略所有掛斷(SIGHUP)信號。在註銷後使用 nohup 命令運行後臺中的程序。要運行後臺中的 nohup 命令,添加 & ( 表示“and”的符號)到命令的尾部。
nohup 是 no hang up 的縮寫,就是不掛斷的意思。
nohup命令:如果你正在運行一個進程,而且你覺得在退出帳戶時該進程還不會結束,那麼可以使用nohup命令。該命令可以在你退出帳戶/關閉終端之後繼續運行相應的進程。
在缺省情況下該作業的所有輸出都被重定向到一個名爲nohup.out的文件中。
用法舉例: nohup command > myout.file 2>&1 &
在上面的例子中,0 – stdin (standard input),1 – stdout (standard output),2 – stderr (standard error) ;
2>&1是將標準錯誤(2)重定向到標準輸出(&1),標準輸出(&1)再被重定向輸入到myout.file文件中。