.net?程序通過?crontab?無法啟動(dòng)手動(dòng)執(zhí)行腳本啟動(dòng)的方法
一、問題描述
.net 網(wǎng)關(guān)程序需要設(shè)置定時(shí)重啟,按照日常操作先把正在運(yùn)行的 PID kill 掉后,再執(zhí)行啟動(dòng)服務(wù)。
把腳本放到 crontab 計(jì)劃任務(wù)上,可以把服務(wù) PID kill 掉,但無法啟動(dòng)服務(wù),直接手動(dòng)運(yùn)行腳本是可以成功啟動(dòng)的。
.net 服務(wù)重啟腳本test1.sh 如下:
[root@localhost ~]# cat test1.sh
#!/bin/bash
ID=`ps -ef | grep YTGateWayServiceZZ| grep -v "grep" | awk '{print $2}'`
for id in $ID;
do
kill -9 $id
done
sleep 3;
nohup dotnet /home/gateway1/YTGateWayServiceZZ.dll > /dev/null 2>&1 &
通過腳本無法啟動(dòng),試著把 .net 程序?qū)懗煞?wù)后,發(fā)現(xiàn)是可以正常重啟的。
二、將 .net 程序?qū)懗煞?wù)
先把原來通過執(zhí)行路徑方式啟動(dòng)的服務(wù) kill 掉之后,再執(zhí)行 config.sh 腳本把程序?qū)懗煞?wù);
并寫入 crontab 計(jì)劃任務(wù)中,通過測(cè)試是可以正常重啟程序。
[root@localhost ~]# cat config.sh #!/bin/bash # 找到 dotnet 命令位置 dotnet=`which dotnet` # 將 .net core 寫成服務(wù)方式運(yùn)行 cat > /usr/lib/systemd/system/gateway1.service << EOF [Unit] # 服務(wù)描述 Description=gateway1 YTGateWayServiceZZ [Service] # 程序工作路徑 WorkingDirectory=/home/gateway1 # 啟動(dòng)程序路徑 ExecStart= $dotnet /home/gateway1/YTGateWayServiceZZ.dll Restart=always # 如果 dotnet 服務(wù)崩潰,10秒后重新啟動(dòng)服務(wù) RestartSec=10 [Install] # 系統(tǒng)運(yùn)行級(jí)別 WantedBy=multi-user.target EOF # 寫入 crontab 計(jì)劃任務(wù)(6個(gè)小時(shí)重啟一次) crontab -l > conf && echo "0 */6 * * * systemctl restart gateway1.service " >> conf && crontab conf && rm -f conf
執(zhí)行腳本 config.sh
[root@localhost ~]# chmod +x config.sh [root@localhost ~]# ./config.sh
管理自定義服務(wù)命令
# systemctl status gateway1.service # systemctl start gateway1.service # systemctl restart gateway1.service # systemctl enable gateway1.service
三、通過 crontab 執(zhí)行腳本無法啟動(dòng)原因
通過將 .net 程序?qū)懗煞?wù)測(cè)試之后,初步判斷很有可能是 crontab 執(zhí)行時(shí)沒有找到系統(tǒng)環(huán)境變量導(dǎo)致的。
檢查了腳本發(fā)現(xiàn)只有 dotnet 命令沒有使用絕對(duì)路徑,試著把 dotnet 命令加上絕對(duì)路徑結(jié)果可以成功啟動(dòng)了。
[root@localhost ~]# which dotnet /usr/local/bin/dotnet
[root@localhost ~]# cat test1.sh
#!/bin/bash
ID=`ps -ef | grep YTGateWayService| grep -v "grep" | awk '{print $2}'`
for id in $ID;
do
kill -9 $id
done
sleep 3;
nohup /usr/local/bin/dotnet /root/publish/YTGateWayService.dll > /dev/null 2>&1 &
到此這篇關(guān)于.net?程序通過?crontab?無法啟動(dòng)手動(dòng)執(zhí)行腳本啟動(dòng)的方法的文章就介紹到這了,更多相關(guān).net??crontab?無法啟動(dòng)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
.NET?Core利用BsonDocumentProjectionDefinition和Lookup進(jìn)行?join?
這篇文章主要介紹了.NET?Core利用BsonDocumentProjectionDefinition和Lookup進(jìn)行join關(guān)聯(lián)查詢,這里主要介紹一下查詢角色的所有用戶的例子,文章結(jié)合實(shí)例代碼給大家詳細(xì)講解,需要的朋友可以參考下2022-10-10
Asp.net使用SignalR實(shí)現(xiàn)酷炫端對(duì)端聊天功能
這篇文章主要為大家詳細(xì)介紹了Asp.net使用SignalR實(shí)現(xiàn)酷炫端對(duì)端聊天功能,感興趣的小伙伴們可以參考一下2016-04-04
asp.net頁面SqlCacheDependency緩存實(shí)例
這篇文章主要介紹了asp.net頁面SqlCacheDependency緩存實(shí)例,以一個(gè)完整實(shí)例來展現(xiàn)asp.net中緩存技術(shù)的使用方法,需要的朋友可以參考下2014-08-08
asp.net 請(qǐng)求輸入到輸出的全過程及httpHandler和httpModuler詳細(xì)介紹
看了幾篇講述httpHandler和HttpModuler的文章,雖然說沒有完全了解底層操作,但是我也算明白了一個(gè)請(qǐng)求從進(jìn)入IIS到最后輸出都經(jīng)歷了哪些過程,感興趣的朋友可以了解下2013-01-01
ASP.NET?Core應(yīng)用JWT進(jìn)行用戶認(rèn)證及Token的刷新方案
本文詳細(xì)講解了ASP.NET?Core應(yīng)用JWT進(jìn)行用戶認(rèn)證及Token的刷新方案,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
在AspNetCore中使用極驗(yàn)做行為認(rèn)證的驗(yàn)證流程
這篇文章主要介紹了在AspNetCore中使用極驗(yàn)做行為認(rèn)證的驗(yàn)證流程 ,本文有圖文介紹有實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09

