Ubuntu下daemon service崩溃自动重启:Restart=on-failure是否足够?
解答:Restart=on-failure是否足以实现应用崩溃自动重启?
没错,Restart=on-failure这一行完全能让systemd在你的应用崩溃时自动重启服务,不过咱们得把几个关键细节捋清楚,确保你的配置能稳定运行:
为什么Restart=on-failure有效?
systemd的Restart参数中,on-failure的触发场景正好覆盖了大多数应用崩溃的情况:
- 当应用进程以非零退出码终止时(比如未处理的异常导致的崩溃退出)
- 当进程被信号杀死时(比如段错误
SIGSEGV、总线错误SIGBUS这类典型的崩溃信号) - 当进程出现超时退出时
这些场景正好对应你担心的“应用崩溃”情况,所以这个配置是有效的。
你的配置需要修正一个小问题
注意到你ExecStart里的路径/home/my username包含空格,systemd会把空格后的部分当成额外参数解析,导致服务启动失败。你需要用双引号把带空格的路径括起来:
ExecStart = /usr/bin/dotnet "/home/my username/Desktop/publish/SimpleApp.dll"
可选的优化配置
如果想让服务重启逻辑更稳健,还可以添加两个实用参数:
RestartSec=5:指定崩溃后延迟5秒再重启,避免短时间内频繁重启给系统带来不必要的压力(默认是100毫秒,稍微调长一点更合理)WatchdogSec=30:如果你的应用可能出现“挂起无响应”(不是直接崩溃退出)的情况,可以配合应用内部的watchdog心跳机制,让systemd检测到无响应进程并重启它(需要你的.NET应用支持watchdog功能)
修正并优化后的完整配置如下:
[Unit] Description = Hello World Daemon [Service] ExecStart = /usr/bin/dotnet "/home/my username/Desktop/publish/SimpleApp.dll" Restart = on-failure RestartSec=5 # 可选:添加延迟重启时间 [Install] WantedBy = multi-user.target
内容的提问来源于stack exchange,提问作者Charanoglu
相关产品推荐
相关产品推荐

