日常运维中,难免会出现程序崩溃,服务器卡死等情况。如果没有良好的自动处理系统,恢复起来将非常困难,如果是线上环境很可能造成极大的损失。本文将简单介绍使用Linux 服务来管理程序。

  • 简介

  • 创建

cd /etc/systemd/system

[Unit]

# 对当前服务的描述
Description=ebook_task

# 启动顺序,在network.target启动之后启动
# After=network.target
# 启动顺序,在network.target启动之前启动 
# Before =network.target

[Service]



# 工作的根本目录
WorkingDirectory=/root/deploy/ebook/ebook_task

# 服务执行的命令
ExecStart=/usr/bin/java -jar /root/deploy/ebook/ebook_task/ebook_task.jar --spring.profiles.active=dev

# ExecReload:指定单元停止时执行的命令或者脚本。
# ExecStop:指定单元停止时执行的命令或者脚本。


# 重启策略
# on-failure   程序意外退出(exit status is not 0)
Restart=always

# 重启时间 默认 100ms
RestartSec=5

# 
SyslogIdentifier=ebook_task

# 服务用户
User=root
StandardOutput=null
#Environment=ASPNETCORE_ENVIRONMENT=Production
#Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

# simple(默认值):systemd认为该服务将立即启动。服务进程不会fork。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型。
# forking:systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定 PIDFile=,以便systemd能够跟踪服务的主进程。
# oneshot:这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。
# notify:与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。
# dbus:若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。
# idle: systemd会等待所有任务(Jobs)处理完成后,才开始执行idle类型的单元。除此之外,其他行为和Type=simple 类似。
# Type=simple


[Install]
WantedBy=multi-user.target

Q.E.D.