一、问题描述

.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 无法启动,手动执行脚本可以启动的更多相关文章

  1. crontab 定时执行脚本出错,但手动执行脚本正常

    原因: crontab 没有去读环境变量,需要再脚本中手动引入环境变量,可以用source 也可以用export 写死环境变量. 为了定时监控Linux系统CPU.内存.负载的使用情况,写了个Shel ...

  2. Linux开机启动时执行脚本的方法

    方法 1 – 使用 rc.local利用 /etc/ 中的 rc.local 文件在启动时执行脚本与命令.我们在文件中加上一行来执行脚本,这样每次启动系统时,都会执行该脚本.不过我们首先需要为 /et ...

  3. crontab执行脚本和手动执行脚本输出结果不一致的问题处理

    背景:huskiesir最近用公司给分配的账户写了脚本去检测某应用状态并发送到企业邮箱,写完脚本之后去执行了一下,发现效果还不错,在邮箱显示效果如下: 10.11.116.6  检查结果OK,检查时间 ...

  4. 小记---------手动执行脚本正常执行,使用crontab定时执行时 不执行

    可能出现的原因就是因为crontab不会从用户的/etc/profile文件中读取环境变量,所以就出现 使用定时crontab执行时 无法执行 抛错 所以在使用crontab 定时执行脚本时  在脚本 ...

  5. jmeter之非GUI启动与执行脚本

    启动jmeter的图形界面可以从dos窗口输命令启动:图形界面还是比较占资源的,这时候可以通过dos窗口来执行脚本,获取性能结果 目录 1.dos窗口启动jmeter图形界面 2.dos窗口执行脚本, ...

  6. crontab的定时任务不能自动执行,但是手动执行脚本一直能成功

    crontab 问题小记: 环境变量问题, 养成良好的习惯, 在脚本开头export PATH 原因是 crontab 执行定时任务时,用的不是系统环境变量,而是自己的环境变量,可以把 echo $P ...

  7. 手动执行脚本可以运行,crontab自动执行无效的解决方法

    在需要执行的脚本里加入环境变量即可,如下图:

  8. docker容器启动时执行脚本 run /bin/bash执行多条指令

    搜了很多资料发现并未解决,以下方法失败!求大神评论给出完美方案 1.首先需要编写需要启动的脚本,并将脚本放在 /etc/init.d/目录下 如:cs.sh 2.修改权限 3.chkconfig -- ...

  9. java 调用启动远程shell脚本,启动spark

    1 依赖 <!--远程调用shell--> <dependency> <groupId>ch.ethz.ganymed</groupId> <ar ...

随机推荐

  1. C#使用Thrift作为RPC框架实战(四)之TSocket

    前言 在前几个小节中我们讲了Thrift框架的基本概念以及重要的名称空间,接下来的几个小节,我们将站在实战的角度来深入讲解一些Thrift的重要类型.本小节我先要讲一下Thrift框架支持TCP通信的 ...

  2. 进击的 Ansible(二):如何快速搞定生产环境 Ansible 项目布局?

    Tips:与前文 <进击的 Ansible(一):Ansible 快速入门> 一样,本文使用的 Ansible 版本 2.5.4,项目演示环境 MacOS.由于 Ansible 项目开发活 ...

  3. NextPolish对基因组进行polish

    NextPolish由未来组开发对基因组序列进行polish的工具,对三代以及二代均可进行polish. gituhp地址:https://github.com/Nextomics/NextPolis ...

  4. R包MetaboAnalystR安装指南(Linux环境非root)

    前言 这是代谢组学数据分析的一个R包,包括用于代谢组学数据分析.可视化和功能注释等众多功能.最近有同事在集群中搭建蛋白和代谢流程,安装这个包出现了问题,于是我折腾了一上午. 这个包的介绍在:https ...

  5. android 点击图片从Fragment跳转到activity

    android 点击图片从Fragment跳转到activity 在Fragment里编写 public View onCreateView(@NonNull LayoutInflater infla ...

  6. QQ空间技术架构之深刻揭秘

    QQ空间技术架构之深刻揭秘 来源: 腾讯大讲堂  发布时间: 2012-05-17 17:24  阅读: 7822 次  推荐: 4   [收藏]   QQ 空间作为腾讯海量互联网服务产品,经过近七年 ...

  7. 使用C语言来扩展PHP,写PHP扩展dll

    转自http://www.cnblogs.com/myths/archive/2011/11/28/2266593.html 以前写过一次PHP扩展DLL,那个是利用调用系统的COM口实现的扩展,与P ...

  8. 二进制免编译My SQL

    一 下载 MySQL 安装包教程 https://blog.csdn.net/zhan107876/article/details/100701135 ll -h mysql-5.6.47-linux ...

  9. volatile原理和应用场景

    volatile是java语言中的一个关键字,常用于并发编程,有两个重要的特点:具有可见性,java虚拟机实现会为其满足Happens before原则;不具备原子性.用法是修饰变量,如:volati ...

  10. LeetCode382-链表随机节点

    原题链接:[382. 链表随机节点]:https://leetcode-cn.com/problems/linked-list-random-node/ 题目描述: 给定一个单链表,随机选择链表的一个 ...