systemd script, systemd unit, 启动脚本
systemd script, systemd unit, 启动脚本 service unit 配置文件 template vim /etc/systemd/system/foo.service [Unit] Description=start proxy After=network.target [Service] Type=oneshot ExecStart=/usr/local/bin/proxy.sh RemainAfterExit=true [Install] WantedBy=multi-user.target [Unit] # 服务启动时会在 journal 里打印 description0 Description=description0 After=network.target sshd-keygen.service [Service] # 脚本路径必须是绝对路径 /bin/sh 为 shell 解释器不能省 ExecStart=/bin/sh /usr/local/bin/shell-script0.sh Environment="GODEBUG='gctrace=1'" Environment="ANOTHER_SECRET=JP8YLOc2bsNlrGuD6LVTq7L36obpjzxd" [Install] WantedBy=multi-user.target # 在哪个服务后面启动 (如依赖的服务) Requires=pulseaudio.service # 在哪个服务后面启动 (如依赖的服务) After=pulseaudio.service [Unit] 启动顺序与依赖关系 After 字段: 表示如果 network.target 或 sshd-keygen.service 需要启动, 那么 foo.service 应该在它们之后启动。 相应地,还有一个 Before 字段, 定义 foo.service 应该在哪些服务之前启动。 注意, After 和 Before 字段只涉及启动顺序,不涉及依赖关系。 ConditionPathExists, AssertPathExists: 要求给定的绝对路径文件已经存在,否则不做任何事(condition)或进入failed状态(assert),可在路径前使用!表示条件取反,即不存在时才启动服务。 ConditionPathIsDirectory, AssertPathIsDirectory: 如上,路径存在且是目录时启动。 StartLimitIntervalSec=400 StartLimitBurst=3 [Service] 区块 用来 Service 的配置,只有 Service 类型的 Unit 才有这个区块。它的主要字段如下 Type:定义启动时的进程行为。它有以下几种值。 Type=simple:默认值,执行ExecStart指定的命令,启动主进程 Type=forking:以 fork 方式从父进程创建子进程,创建后父进程会立即退出 Type=oneshot:一次性进程,Systemd 会等当前服务退出,再继续往下执行 Type=dbus:当前服务通过D-Bus启动 Type=notify:当前服务启动完毕,会通知Systemd,再继续往下执行 Type=idle:若有其他任务执行完毕,当前服务才会运行 ExecStart:服务启动时要执行的命令 ExecStartPre:启动当前服务之前执行的命令 ExecStartPost:启动当前服务之后执行的命令 ExecReload:重启当前服务时执行的命令 ExecStop:停止当前服务时执行的命令 ExecStopPost:停止当其服务之后执行的命令 RestartSec:自动重启当前服务间隔的秒数 Restart:定义何种情况 Systemd 会自动重启当前服务,no, on-success, on-failure, on-abnormal, on-watchdog, on-abort, or always, 默认值: no TimeoutSec:定义 Systemd 停止当前服务之前等待的秒数 Environment:指定环境变量 EnvironmentFile: 指定文件,可定义多个环境变量,按分行方式存储。 WorkingDirectory, 工作目录, 程序启动时的当前目录。如果使用到 workingdirectory,需要先创建该目录 [Install] 段落相关的指令,它们只在systemctl enable/disable操作时有效。如果期望服务开机自启动,一般只配置一个WantedBy指令,如果不期望服务开机自启动,则Install段落通常省略。主要包含以下内容: WantedBy 本服务设置开机自启动时,在被依赖目标的.wants目录下创建本服务的软链接。例如WantedBy = multi-user.target时,将在/etc/systemd/multi-user.target.wants目录下创建本服务的软链接。 RequiredBy 类似WantedBy,但是是在.requires目录下创建软链接。 Alias 指定创建软链接时链接至本服务配置文件的别名文件。例如reboot.target中配置了Alias=ctrl-alt-del.target,当执行enable时,将创建/etc/systemd/system/ctrl-alt-del.service软链接并指向reboot.target。 DefaultInstance 当是一个模板服务配置文件时(即文件名为Service_Name@.service),该指令指定该模板的默认实例。例如trojan@.service中配置了DefaultInstall=server时,systemctl enable trojan@.service时将创建名为trojan@server.service的软链接。 可以通过以下两个选项来设置服务启动的频率: ...