Linux 自定义服务启动失败分析
  mPcyh9OXzYGu 2023年11月02日 41 0

自定义frpc 开机启动,结果开机启动失败,手动启动正常,原因,启动的时候网络配置未完成


修改前的配置

root@pve:~# cat /etc/systemd/system/frpc.service
[Unit]
Description=Frp Server
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/frpc -c /etc/frp/frpc.ini
Restart=on-failure

[Install]
WantedBy=multi-user.target


修改后的配置

root@pve:~# cat /etc/systemd/system/frpc.service
[Unit]
Description=Frp Server
Wants=network-online.target
After=network-online.target

[Service]
ExecStartPre=/bin/sleep 3
Type=simple
ExecStart=/usr/bin/frpc -c /etc/frp/frpc.ini
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255

[Install]
antedBy=multi-user.target

相关说明

[Unit]部分:

Description:服务的描述。
Wants=network-online.target:指定服务依赖于网络在线状态。
After=network-online.target:确保在network-online.target之后启动此服务。
[Service]部分:

ExecStartPre=/bin/sleep 5:在启动实际服务之前,等待5秒。这里设置了延迟启动时间。
ExecStart=/path/to/your/custom-service-executable:指定要启动的自定义服务可执行文件的路径。
Restart=on-failure:在服务失败时自动重启。
[Install]部分:

WantedBy=multi-user.target:将此服务添加到multi-user.target,以便在系统启动时自动启动。
root@pve:~# cat /etc/systemd/system/sshd.service
[Unit]
Description=OpenBSD Secure Shell server
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run

[Service]
EnvironmentFile=-/etc/default/ssh
ExecStartPre=/usr/sbin/sshd -t
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/usr/sbin/sshd -t
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify
RuntimeDirectory=sshd
RuntimeDirectoryMode=0755

[Install]
WantedBy=multi-user.target
Alias=sshd.service

其中在[Service]其他相关配置

KillMode=process:此选项指定了在停止服务时,Systemd应如何终止服务的进程。KillMode=process表示只有主进程会被终止,而其他可能产生的子进程将不受影响。其他可用的KillMode值包括control-group(终止整个进程组)和mixed(终止主进程和进程组中的所有进程,但不会发送SIGKILL信号)。

Restart=on-failure:此选项指定了在什么情况下Systemd应重启服务。Restart=on-failure表示如果服务意外终止(例如,由于进程崩溃或非正常退出状态),则Systemd将尝试重新启动它。其他可用的Restart值包括always(总是重启)、on-success(仅在成功退出时重启),on-abnormal(在异常情况下重启),on-abort(进程被终止时重启)和on-watchdog(在触发看门狗超时时重启)。

RestartPreventExitStatus=255:此选项指定了一组退出状态,如果服务进程以这些状态退出,Systemd将不会尝试重启服务。RestartPreventExitStatus=255表示当服务进程以退出状态255退出时,Systemd将不会重启服务。您可以指定一个或多个退出状态,使用空格分隔。

Type=notify 和 Type=simple:这些选项定义了Systemd如何管理服务进程。Type=notify表示服务将在完成启动后通过Systemd的通知机制通知Systemd。这使得Systemd可以在收到通知后开始启动其他依赖于此服务的服务。Type=simple表示服务将立即开始运行,Systemd将认为服务已经启动。在这种情况下,Systemd将无法确定服务何时实际完成了启动过程。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  Yoru5qB4TSKM   2023年12月10日   39   0   0 服务器重启IP
mPcyh9OXzYGu