將代碼上傳到相應的目錄,并且配置了一個.sh的啟動腳本文件
文件內容:
#!/bin/bash# 指定JAR文件的路徑(如果JAR文件在當前目錄,可以直接使用文件名)
JAR_FILE="/usr/local/java/xs_luruan_client/lib/xs_luruan_client.jar"
# 或者使用絕對路徑
# JAR_FILE="/path/to/your/myapp.jar"# 檢查JAR文件是否存在
if [ ! -f "$JAR_FILE" ]; thenecho "Error: JAR file '$JAR_FILE' not found!"exit 1
fi# 運行JAR文件
java -cp "$JAR_FILE" com.xs.start.Starter# 檢查Java命令是否成功執行(可選)
# 注意:這個檢查可能不夠準確,因為Java應用可能會以非零狀態碼退出表示正常結束(例如,Spring Boot應用的優雅停機)
# 如果你需要更精確的檢查,應該根據應用的具體行為來調整
if [ $? -ne 0 ]; thenecho "Error: Java application exited with a non-zero status code."exit 1
fiecho "Java application exited successfully."
運行start.sh
./start.sh
運行界面:
我現在要做成開機啟動的方式:
創建.service文件
[Unit]
Description=XS Luruan Client Service
After=network.target[Service]
Type=simple
ExecStart=/usr/local/java/xs_luruan_client/start.sh
Restart=on-failure
User=root[Install]
WantedBy=multi-user.target
將文件命名為:xs_luruan_client.service
將文件通過filezille工具上傳到:/etc/systemd/system文件夾下,但是提示權限不夠
怎么辦呢,那應該就得付權限了
想直接在這個目錄下創建.service文件,或者將.service文件復制到該目錄下,提示
sudo: /etc/sudoers.d/README is world writable
經過查詢deepseek,讓修改權限
可以上傳了
然后將設置自啟動
在系統上執行如下:
驗證下是否啟動:
竟然啟動失敗了,這是怎么回事呢
查看服務狀態
提示如下:
[Unit]
Description=XS Luruan Client Service
After=network.target[Service]
Environment="JAVA_HOME=/usr/local/java/jdk1.8.0_391"
Environment="PATH=$JAVA_HOME/bin:$PATH"
Type=simple
ExecStart=/usr/local/java/xs_luruan_client/start.sh
Restart=on-failure
User=root[Install]
WantedBy=multi-user.target
增加了環境變了
重新刷新驗證
還是同樣的問題
查找javahome的絕對路徑
readlink -f $(which java)
在.sh中命令增加絕對路徑
#!/bin/bash# 指定JAR文件的路徑(如果JAR文件在當前目錄,可以直接使用文件名)
JAR_FILE="/usr/local/java/xs_luruan_client/lib/xs_luruan_client.jar"
# 或者使用絕對路徑
# JAR_FILE="/path/to/your/myapp.jar"# 檢查JAR文件是否存在
if [ ! -f "$JAR_FILE" ]; thenecho "Error: JAR file '$JAR_FILE' not found!"exit 1
fi# 運行JAR文件
/usr/local/java/jdk1.8.0_391/bin/java -cp "$JAR_FILE" com.xs.start.Starter# 檢查Java命令是否成功執行(可選)
# 注意:這個檢查可能不夠準確,因為Java應用可能會以非零狀態碼退出表示正常結束(例如,Spring Boot應用的優雅停機)
# 如果你需要更精確的檢查,應該根據應用的具體行為來調整
if [ $? -ne 0 ]; thenecho "Error: Java application exited with a non-zero status code."exit 1
fiecho "Java application exited successfully."
就可以正常啟動了
現在要系統重啟,發現的確執行了,但是聯網失敗了,看來是在終端聯網就啟動系統了,但是網絡還沒有通,所以聯網失敗了。
關閉服務:
# 停止單個服務(需管理員權限)
sudo systemctl stop <service-name># 示例:停止 Apache/Nginx
sudo systemctl stop apache2 # Ubuntu/Debian 的 Apache
sudo systemctl stop httpd # CentOS/RHEL 的 Apache
sudo systemctl stop nginx # Nginx# 查看服務狀態(確認是否停止)
sudo systemctl status <service-name>
那么看看如何實現延時啟動呢。
在.service文件中增加延時配置
[Unit]
Description=XS Luruan Client Service
After=network.target[Service]
Environment="JAVA_HOME=/usr/local/java/jdk1.8.0_391"
Environment="PATH=$JAVA_HOME/bin:$PATH"
Type=simple
ExecStartPre=/bin/sleep 50 # 延時5秒
ExecStart=/usr/local/java/xs_luruan_client/start.sh
Restart=on-failure
User=root[Install]
WantedBy=multi-user.target
然后重新將文件上傳,并且復制到system目錄,刷新systemctl
提示sleep不存在,
那么就監測sleep是否存在
which sleep # 輸出應為 /bin/sleep 或 /usr/bin/sleep
輸出:
/usr/bin/sleep?
那么就把start.sh? 和 service文件都改一下
#!/bin/bash# 指定JAR文件的路徑(如果JAR文件在當前目錄,可以直接使用文件名)
JAR_FILE="/usr/local/java/xs_luruan_client/lib/xs_luruan_client.jar"
# 或者使用絕對路徑
# JAR_FILE="/path/to/your/myapp.jar"# 檢查JAR文件是否存在
if [ ! -f "$JAR_FILE" ]; thenecho "Error: JAR file '$JAR_FILE' not found!"exit 1
fi
#延時50秒再執行,以便于設備聯網成功
/usr/bin/sleep 50# 運行JAR文件
/usr/local/java/jdk1.8.0_391/bin/java -cp "$JAR_FILE" com.xs.start.Starter# 檢查Java命令是否成功執行(可選)
# 注意:這個檢查可能不夠準確,因為Java應用可能會以非零狀態碼退出表示正常結束(例如,Spring Boot應用的優雅停機)
# 如果你需要更精確的檢查,應該根據應用的具體行為來調整
if [ $? -ne 0 ]; thenecho "Error: Java application exited with a non-zero status code."exit 1
fiecho "Java application exited successfully."
[Unit]
Description=XS Luruan Client Service
# 聲明需要網絡在線后才能啟動
After=network-online.target
Wants=network-online.target[Service]
Environment="JAVA_HOME=/usr/local/java/jdk1.8.0_391"
Environment="PATH=$JAVA_HOME/bin:$PATH"
Type=simple
ExecStart=/usr/local/java/xs_luruan_client/start.sh
Restart=on-failure
User=root[Install]
WantedBy=multi-user.target
通過在.sh中增加延時操作,終于可以在自啟過程中,等待網絡連接成功后再啟動了,