1. 程式人生 > >把Tomcat配置為系統服務

把Tomcat配置為系統服務

yum命令安裝Tomcat後發現是Tomcat7,現在Tomcat9都出來了,為了用上最新版本,就去官網下了壓縮包自己解壓安裝了Tomcat9.0.12.但自己安裝的操作起來不方便。本來準備把$CATALINA_HOME/bin/shartup.sh放到開機啟動的腳本里面,突然想起來可以配置成系統服務呀,這樣不是更方便嗎。然而,事情並沒有那麼簡單,畢竟我什麼都不懂。

  1. 找到了完美的配置。 在這裡找到了一篇博文,感覺很完美地解決了我的問題,我都已經想好了,弄完之後貼個連結,標個轉載,又是一篇部落格。
  2. 不太對呀 然而,執行systemctl start tomcat.service時報錯,天哪,用systemctl status tomcat.servide發現錯誤是Failed to read PID from file /usr/local/tomcat9/tomcat.pid: Invalid argument。
  3. 又有辦法了 在百度上搜了一下,看到別人配置Nginx時也有類似的錯誤,解決方法是要麼把服務配置檔案中的PIDFile那一行刪了,要麼是在配置檔案中加一行,ExecStartPost=/bin/sleep 0.1,這樣是在啟動指令碼執行之後等0.1秒,然後再去讀.pid檔案。直接寫在服務配置檔案裡面或者/etc/systemd/system/tomcat.service.d/override.conf裡面都可以,後面的這個檔案也會在服務呼叫時生效,覆寫服務配置檔案。
  4. 到底行不行 按照上面的改了服務配置檔案之後執行systemctl daemon-reload。然後systemctl start tomcat,結果還是不行,檢視原因說PID file /usr/local/tomcat9/tomcat.pid not readable (yet?) after start-post.還是.pid檔案的原因,看了一下,竟然沒有那個檔案,那用touch新建一個吧。然而還是不行。看別人的pid檔案都在/var/run/裡面,要不試試,還是不行。
  5. 原來是這麼回事 實在是沒辦法呀,我覺得既然人家寫了pid檔案,最好還是別刪,想想辦法弄好,不好意思,真的弄不好。刪了pid檔案那一行,果然就可以了。 又去看了一下,原來這個pid檔案不是systemd生成的,它是對應的守護程序自己生成的,而且用處不大,現在也很少用了,Tomcat啟動後並不會去生成對應的pid檔案,所以一直不行,一直報錯。放心地大膽地去刪掉就可以了。
  6. 一點補充 start之後的狀態是Active: active (running),但是stop之後的狀態是Active: failed (Result: exit-code),原來Tomcat停止成功的狀態是143,在服務配置檔案裡面加一行SuccessExitStatus=143。現在stop之後的狀態是Active: inactive (dead)。
  7. 來個總結 網上搜索的時候很難有百分百合適的結果,看著差不多就耐心點看完,隨便瞟一眼就又去找其他的,這樣很沒效率。