.net 程序通过 crontab 无法启动,手动执行脚本可以启动
一、问题描述
.net 网关程序需要设置定时重启,按照日常操作先把正在运行的 PID kill 掉后,再执行启动服务。
把脚本放到 crontab
计划任务上,可以把服务 PID kill 掉,但无法启动服务,直接手动运行脚本是可以成功启动的。
.net 服务重启脚本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 &
通过脚本无法启动,试着把 .net 程序写成服务后,发现是可以正常重启的。
二、将 .net 程序写成服务
先把原来通过执行路径方式启动的服务 kill
掉之后,再执行 config.sh
脚本把程序写成服务;
并写入 crontab
计划任务中,通过测试是可以正常重启程序。
[root@localhost ~]# cat config.sh
#!/bin/bash
# 找到 dotnet 命令位置
dotnet=`which dotnet`
# 将 .net core 写成服务方式运行
cat > /usr/lib/systemd/system/gateway1.service << EOF
[Unit]
# 服务描述
Description=gateway1 YTGateWayServiceZZ
[Service]
# 程序工作路径
WorkingDirectory=/home/gateway1
# 启动程序路径
ExecStart= $dotnet /home/gateway1/YTGateWayServiceZZ.dll
Restart=always
# 如果 dotnet 服务崩溃,10秒后重新启动服务
RestartSec=10
[Install]
# 系统运行级别
WantedBy=multi-user.target
EOF
# 写入 crontab 计划任务(6个小时重启一次)
crontab -l > conf && echo "0 */6 * * * systemctl restart gateway1.service " >> conf && crontab conf && rm -f conf
执行脚本 config.sh
[root@localhost ~]# chmod +x config.sh
[root@localhost ~]# ./config.sh
管理自定义服务命令
# systemctl status gateway1.service
# systemctl start gateway1.service
# systemctl restart gateway1.service
# systemctl enable gateway1.service
三、通过 crontab 执行脚本无法启动原因
通过将 .net 程序写成服务测试之后,初步判断很有可能是 crontab
执行时没有找到系统环境变量导致的。
检查了脚本发现只有 dotnet
命令没有使用绝对路径,试着把 dotnet
命令加上绝对路径结果可以成功启动了。
[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 &
.net 程序通过 crontab 无法启动,手动执行脚本可以启动的更多相关文章
- crontab 定时执行脚本出错,但手动执行脚本正常
原因: crontab 没有去读环境变量,需要再脚本中手动引入环境变量,可以用source 也可以用export 写死环境变量. 为了定时监控Linux系统CPU.内存.负载的使用情况,写了个Shel ...
- Linux开机启动时执行脚本的方法
方法 1 – 使用 rc.local利用 /etc/ 中的 rc.local 文件在启动时执行脚本与命令.我们在文件中加上一行来执行脚本,这样每次启动系统时,都会执行该脚本.不过我们首先需要为 /et ...
- crontab执行脚本和手动执行脚本输出结果不一致的问题处理
背景:huskiesir最近用公司给分配的账户写了脚本去检测某应用状态并发送到企业邮箱,写完脚本之后去执行了一下,发现效果还不错,在邮箱显示效果如下: 10.11.116.6 检查结果OK,检查时间 ...
- 小记---------手动执行脚本正常执行,使用crontab定时执行时 不执行
可能出现的原因就是因为crontab不会从用户的/etc/profile文件中读取环境变量,所以就出现 使用定时crontab执行时 无法执行 抛错 所以在使用crontab 定时执行脚本时 在脚本 ...
- jmeter之非GUI启动与执行脚本
启动jmeter的图形界面可以从dos窗口输命令启动:图形界面还是比较占资源的,这时候可以通过dos窗口来执行脚本,获取性能结果 目录 1.dos窗口启动jmeter图形界面 2.dos窗口执行脚本, ...
- crontab的定时任务不能自动执行,但是手动执行脚本一直能成功
crontab 问题小记: 环境变量问题, 养成良好的习惯, 在脚本开头export PATH 原因是 crontab 执行定时任务时,用的不是系统环境变量,而是自己的环境变量,可以把 echo $P ...
- 手动执行脚本可以运行,crontab自动执行无效的解决方法
在需要执行的脚本里加入环境变量即可,如下图:
- docker容器启动时执行脚本 run /bin/bash执行多条指令
搜了很多资料发现并未解决,以下方法失败!求大神评论给出完美方案 1.首先需要编写需要启动的脚本,并将脚本放在 /etc/init.d/目录下 如:cs.sh 2.修改权限 3.chkconfig -- ...
- java 调用启动远程shell脚本,启动spark
1 依赖 <!--远程调用shell--> <dependency> <groupId>ch.ethz.ganymed</groupId> <ar ...
随机推荐
- 59. Divide Two Integers
Divide Two Integers My Submissions QuestionEditorial Solution Total Accepted: 66073 Total Submission ...
- Python中类的各式方法介绍
本文类的方法介绍包括类方法.属性方法.静态方法.修改属性方法等内置装饰器装饰的方法,以及类的一些特殊成员方法 1. 类的特殊成员方法 1.1 构造方法 # -*- coding:utf-8 -*- # ...
- 日常Java 2021/9/29
StringBuffer方法 public StringBuffer append(String s) 将指定的字符串追加到此字符序列. public StringBuffer reverse() 将 ...
- 大数据学习day36-----flume02--------1.avro source和kafka source 2. 拦截器(Interceptor) 3. channel详解 4 sink 5 slector(选择器)6 sink processor
1.avro source和kafka source 1.1 avro source avro source是通过监听一个网络端口来收数据,而且接受的数据必须是使用avro序列化框架序列化后的数据.a ...
- 在服务端应用中如何获得客户端 IP
如果有 x-forwarded-for 的请求头,则取其中的第一个 IP,否则取建立连接 socket 的 remoteAddr. 而 x-forwarded-for 基本已成为了基于 proxy 的 ...
- 转 android开发笔记之handler+Runnable的一个巧妙应用
本文链接:https://blog.csdn.net/hfreeman2008/article/details/12118817 版权 1. 一个有趣Demo: (1)定义一个handler变量 pr ...
- k8s之ansible安装
项目地址:https://github.com/easzlab/kubeasz #:先配置harbor #:利用脚本安装docker root@k8s-harbor1:~# vim docker_in ...
- oracle 当月日历的sql
select max(sun) sun, max(mon) mon, max(tue) tue, max(wed) wed, max(thu) thu, max(fri) fri, max(sat) ...
- Linux基础命令---apachectl
apachectl apachectl指令是apache http服务器的前端控制程序,可以协助控制apache服务的守护进程httpd. 此命令的适用范围:RedHat.RHEL.Ubuntu.Ce ...
- lucene中创建索引库
package com.hope.lucene;import org.apache.commons.io.FileUtils;import org.apache.lucene.document.Doc ...