移动网站视频主持人网,网页网站的区别是什么,谷歌搜索引擎下载安装,seo是搜索引擎优化吗方法一 #xff1a;使用systemd的service文件自定义开机启动服务
一、kylin 添加自定义脚本服务说明
在kylin 下#xff0c;使用管理unit的方式来控制开机自启动服务和添加自定义脚本服务。在/usr/lib/systemd/system目录下包含了各种unit文件#xff0c;有service后缀的服…方法一 使用systemd的service文件自定义开机启动服务
一、kylin 添加自定义脚本服务说明
在kylin 下使用管理unit的方式来控制开机自启动服务和添加自定义脚本服务。在/usr/lib/systemd/system目录下包含了各种unit文件有service后缀的服务unit有target后缀的开机级别unit等。这里介绍自定义脚本服务如果想把自定义的脚本变成服务进程都需要写对应的service配置文件这样才能被unit所管理注意自定义开机自启动服务的.service配置文件必须放在/usr/lib/systemd/system这个目录下面。服务类别又分为服务又分为系统服务system和用户服务user。
系统服务开机不登陆就能运行的程序常用于开机自启。
用户服务需要登陆以后才能运行的程序。
二、编写.service配置文件说明
1、[unit]区块设置管理启动顺序与依赖关系 Description服务描述 给出当前服务的简单描述 Documentation路径或url 给出文档位置 After服务.target或服务.service 定义在某些服务之后启动。例如sshd服务启动必须在network.target sshd-keygen.service服务开启之后才能启动,可以使用如下命令查看sshd服务的配置 cat /usr/lib/systemd/system/sshd.service Before服务.target 定义在某些服务之前启动 Wants服务.service 弱依赖,表示等号填写服务启动或失败,不影响此配置文件服务的启动 Requires服务.service 强依赖,表示等号填写服务启动或失败,那么此配置文件的服务将启动失败
注意:如果After、Before、Wants、Requires等号后面需要填写多个服务可以用空格隔开。After和Before字段只涉及启动顺序,不涉及依赖关系。Wants字段与Requires字段只涉及依赖关系,与启动顺序无关,默认情况下是同时启动的。
2、[Service]区块设置启动行为 •启动命令 ExecStart命令 定义启动进程时执行的命令 ExecReload命令 重启服务时执行的命令 ExecStop命令 停止服务时执行的命令 ExecStartPre命令 启动服务之前执行的命令 ExecStartPost命令 启动服务之后执行的命令 ExecStopPost命令 停止服务之后执行的命令
所有的启动设置之前都可以加上一个连词号-表示抑制错误即发生错误的时候不影响其他命令的执行。例如ExecStop-/bin/sh /server/scripts/xx.sh
•启动类型 Type字段定义启动类型。它可以设置的值如下 simple(默认值) ExecStart字段启动的进程为主进程 forking ExecStart字段将以fork()方式启动此时父进程将会退出子进程将成为主进程后台运行 oneshot 类似于simple但只执行一次Systemd 会等它执行完才启动其他服务 dbus 类似于simple但会等待 D-Bus 信号后启动 notify 类似于simple启动结束后会发出通知信号然后 Systemd 再启动其他服务 idl 类似于simple但是要等到其他任务都执行完才会启动该服务。一种使用场合是为让该服务的输出不与其他服务的输出相混合
•重启行为
KillMode字段,定义Systemd如何停止服务,它可以设置的值如下 control-group(默认值) 当前控制组里面的所有子进程都会被杀掉 process 只杀主进程 mixed 主进程将收到 SIGTERM 信号子进程收到 SIGKILL 信号 none 没有进程会被杀掉只是执行服务的 stop 命令
Restart字段,定义了服务退出后,Systemd的重启方式,它可以设置的值如下 no(默认值) 退出后不会重启 on-success 只有正常退出时退出状态码为0才会重启 on-failure 非正常退出时退出状态码非0包括被信号终止和超时才会重启 on-abnormal 只有被信号终止和超时才会重启 on-abort 只有在收到没有捕捉到的信号终止时才会重启 on-watchdog 超时退出才会重启 always 不管是什么退出原因总是重启
•service区块的其他一些字段 EnvironmentFile文件路径 指定当前服务的环境参数文件 RestartSec数值 表示Systemd重启服务之前需要等待的秒数 PIDFilePID文件路径 PID进程文件 KillSignal信号量 停止信号量,值一般为SIGQUIT TimeoutStopSec数值 停止超时时间 PrivateTmp布尔值 独立空间true或false,即文件系统名字空间的配置将被该命令行启动的进程忽略 .service 模板 systemd服务可以通过“serviceargument.service”语法获取单个参数。 这种服务称为“实例化”服务而没有参数参数的单元定义称为“模板”。 一个示例可以是dhcpcd .service服务模板它将网络接口作为参数来形成实例化服务。 在服务文件中可以使用-specifiers访问此参数或“实例名称”。 有关详细信息请参阅systemd.unit5。 自动依赖 隐含的依赖关系 隐式添加以下依赖项 Type dbus设置的服务自动获取类型Requires 和After on dbus.socket的依赖关系。 套接字激活的服务在激活.socket单元后通过自动After 依赖自动排序。 服务还引入套接字中列出的所有.socket单元通过自动Wants 和After 依赖项。 如systemd.exec5和systemd.resource-control5中所述可以添加其他隐式依赖项作为执行和资源控制参数的结果。 默认依赖项 除非设置了DefaultDependencies no否则将添加以下依赖项 服务单元将具有类型为Requires 和After on sysinit.target的依赖项类型为After on basic.target的依赖项以及类型为Conflicts 和Before on shutdown.target的依赖项。这些确保正常的服务单元引入基本系统初始化并在系统关闭之前彻底终止。只有早期启动或延迟系统关闭所涉及的服务才能禁用此选项。 默认情况下为模板单元命名的实例化服务单元即名称中带有“”的服务单元分配每个模板切片单元参见systemd.slice5其中包含特定模板的所有实例。此切片通常在关闭时与所有模板实例一起停止。如果不需要请在模板单元中设置DefaultDependencies no并定义您自己的每个模板切片单元文件该文件也设置DefaultDependencies no或者在模板单元中设置Slice system.slice或其他合适的切片 。另请参见systemd.resource-control5。 选项 Service 文件必须包含“[Service]”部分其中包含有关服务及其监督的过程的信息。本节中可能使用的许多选项与其他单元类型共享。这些选项记录在systemd.exec5systemd.kill5和systemd.resource-control5中。服务单位的“[Service]”部分特定的选项如下 Type 配置此服务单元的过程启动类型。选择simple, exec, forking, oneshot, dbus, notify 或idle之一 如果设置为simple默认情况下如果指定了ExecStart 但Type 也不是BusName 则服务管理器将在主服务进程分离后立即考虑启动该单元。预计使用ExecStart 配置的进程是服务的主要进程。在此模式下如果进程为系统上的其他进程提供功能则应在服务启动之前安装其通信通道例如systemd设置的套接字通过套接字激活因为服务管理器将立即开始跟随-up单元在创建主服务进程之后在执行服务的二进制文件之前。请注意这意味着即使无法成功调用服务的二进制文件简单服务的systemctl start命令行也会报告成功例如因为所选的User 不存在或者缺少服务二进制文件。 exec类型与simple类似但服务管理器会认为在执行主服务二进制文件后立即启动了该单元。服务经理将推迟后续单位的启动直至该点。 或者换句话说在fork返回后简单地继续执行其他作业而exec在服务进程中的fork和execve成功之前不会继续。请注意这意味着exect服务的systemctl启动命令行将无法成功调用服务的二进制文件时报告失败例如因为所选的User 不存在或者服务二进制文件丢失。 如果设置为分叉则预期使用ExecStart 配置的进程将调用fork作为其启动的一部分。预期父进程在启动完成并且所有通信通道都已设置时退出。子进程继续作为主服务进程运行服务管理器将在父进程退出时考虑启动该单元。这是传统UNIX服务的行为。如果使用此设置建议还使用PIDFile 选项以便systemd可以可靠地识别服务的主进程。一旦父进程退出systemd将继续启动后续单元。 oneshot的行为类似于简单;但是服务会在主进程退出后考虑该单元。然后它将启动后续单位。 RemainAfterExit 对此类服务特别有用。如果既未指定Type 也未指定ExecStart 则Type oneshot是隐含的默认值。请注意如果在没有RemainAfterExit 的情况下使用此选项则服务将永远不会进入“活动”单元状态而是直接从“激活”转换为“停用”或“死”因为没有配置应继续运行的进程。特别是这意味着在这种类型的服务运行后并且RemainAfterExit 未设置它将不会显示为之后启动而是显示为已死。 dbus的行为类似于简单;但是预计该服务在D-Bus总线上获取一个名称由BusName 配置。在获得D-Bus总线名称后systemd将继续启动后续单元。配置了此选项的服务单元隐式地获得了对dbus.socket单元的依赖性。如果指定了BusName 则此类型是缺省值。 通知的行为类似于exec;但是预计服务在启动完成后通过sd_notify3或等效呼叫发送通知消息。 systemd将在发送此通知消息后继续启动后续单元。如果使用此选项则应将NotifyAccess 见下文设置为打开对systemd提供的通知套接字的访问权限。如果NotifyAccess 缺失或设置为none则将强制设置为main。请注意如果与PrivateNetwork yes结合使用则当前Type notify将不起作用。 闲置行为非常类似于简单;但是服务程序的实际执行会延迟直到调度所有活动作业为止。这可用于避免将shell服务的输出与控制台上的状态输出交错。请注意此类型仅用于改进控制台输出它不能用作常规单元排序工具并且此服务类型的效果受到5秒超时的影响之后无论如何都会调用服务程序。 通常建议在任何可能的情况下使用Type simple作为长期运行的服务 RemainAfterExit 采用一个布尔值指定即使退出所有进程服务是否应被视为活动状态。 默认为否 GuessMainPID 采用一个布尔值指定systemd是否应该尝试猜测服务的主PID如果无法可靠地确定它。 除非设置了Type forking且未设置PIDFile 否则将忽略此选项因为对于其他类型或使用显式配置的PID文件主PID始终是已知的。 如果守护进程包含多个进程则猜测算法可能会得出错误的结论。 如果无法确定主PID则故障检测和服务的自动重启将无法可靠地运行。 默认为是。 PIDFile 采用引用服务的PID文件的路径。 对于Type 设置为forking的服务建议使用此选项。 指定的路径通常指向/ run /下面的文件。 如果指定了相对路径则因此以/ run /为前缀。 服务管理器将在启动服务后从该文件中读取服务主进程的PID。 服务管理器不会写入此处配置的文件但如果服务仍然存在它将在服务关闭后删除该文件。 PID文件不需要由特权用户拥有但如果它由非特权用户拥有则会强制执行其他安全限制该文件可能不是由不同用户拥有的文件的符号链接既不直接也不间接 PID文件必须引用已属于该服务的进程。 BusName 获取此服务可访问的D-Bus总线名称。 对于Type 设置为dbus的服务此选项是必需的。 ExecStart 具有在启动此服务时执行的参数的命令。根据下面描述的规则将该值拆分为零个或多个命令行请参阅下面的“命令行”部分。 除非Type 是oneshot否则必须给出一个命令。当使用Type oneshot时可以指定零个或多个命令。可以通过在同一指令中提供多个命令行来指定命令或者可以多次指定该指令具有相同的效果。如果将空字符串分配给此选项则重置要启动的命令列表此选项的先前分配将不起作用。如果未指定ExecStart 则服务必须具有RemainAfterExit yes且至少一个ExecStop 行集。 缺少ExecStart 和ExecStop 的服务无效。 对于每个指定的命令第一个参数必须是可执行文件的绝对路径或没有任何斜杠的简单文件名。 可选此文件名可以带有许多特殊字符作为前缀 在这里插入图片描述 “”“ - ”“”和“”/“”/“!!”中的一个 可以一起使用它们可以按任何顺序出现。 但是只有“”“”“!!”中的一个 可以一次使用。 请注意其他命令行设置也支持这些前缀即ExecStartPre ExecStartPost ExecReload ExecStop 和ExecStopPost 。 如果指定了多个命令则按照它们在单元文件中出现的顺序依次调用这些命令。 如果其中一个命令失败并且没有前缀“ - ”则不执行其他行并且该单元被视为失败。 除非设置了Type forking否则通过此命令行启动的进程将被视为守护程序的主进程。 ExecStartPre, ExecStartPost 分别在ExecStart 中的命令之前或之后执行的其他命令。语法与ExecStart 相同除了允许多个命令行并且串行地依次执行命令。 如果这些命令中的任何一个没有以“ - ”为前缀失败则不执行其余命令并且该单元被视为失败。 ExecStart 命令仅在所有ExecStartPre 命令之后运行这些命令未成功以“ - ”为前缀退出。 ExecStartPost 命令仅在ExecStart 中指定的命令成功调用后运行由Type 确定即已为Type simple或Type idle启动进程最后一个ExecStart 进程已成功退出Type oneshot 对于Type forking初始进程成功退出对Type notify发送“READY 1”或者对Type dbus采用BusName 。 请注意ExecStartPre 可能不会用于启动长时间运行的进程。由ExecStartPre 调用的进程分叉的所有进程将在下一个服务进程运行之前被终止。 请注意如果在ExecStartPre ExecStart 或ExecStartPost 中指定的任何命令失败并且没有前缀“ - ”请参见上文或在服务完全启动之前超时则继续执行ExecStopPost中指定的命令 跳过ExecStop 中的命令。 ExecCondition 在ExecStartPre 中的命令之前执行的可选命令。语法与ExecStart 相同除了允许多个命令行并且串行地依次执行命令。 行为类似于ExecStartPre 和条件检查混合当ExecCondition 命令以退出代码1到254包括退出时将跳过其余命令并且单元未标记为失败。但是如果ExecCondition 命令以255退出或异常例如超时被信号杀死等则该单元将被视为失败并且将跳过剩余的命令。退出代码0或匹配SuccessExitStatus 的代码将继续执行到下一个命令。 关于不在ExecStartPre 中运行长时间运行的进程的相同建议也适用于ExecCondition 。 ExecCondition 还将运行ExecStopPost 中的命令作为停止服务的一部分在任何非零或异常退出的情况下如上所述。 ExecReload 要执行的命令以在服务中触发配置重新加载。 此参数采用多个命令行遵循与ExecStart 上面描述的相同的方案。 使用此设置是可选的。 此处支持说明符和环境变量替换遵循与ExecStart 相同的方案。 设置了一个额外的特殊环境变量如果已知则将$ MAINPID设置为守护程序的主进程并且可以用于以下命令行 / bin / kill -HUP $ MAINPID 但请注意通过发送信号重新加载守护程序与上面的示例行一样通常不是一个好的选择因为这是一个异步操作因此不适合命令多个服务相互重新加载。 强烈建议将ExecReload 设置为一个命令该命令不仅会触发守护程序的配置重新加载还会同步等待它完成。 ExecStop 要执行以停止通过ExecStart 启动服务的命令。此参数采用多个命令行遵循与ExecStart 上面描述的相同的方案。使用此设置是可选的。运行此选项中配置的命令后暗示服务已停止并且根据KillMode 设置终止为其剩余s的任何进程请参阅systemd.kill5。如果未指定此选项则在请求服务停止时通过发送KillSignal 中指定的信号来终止该过程。支持说明符和环境变量替换包括$ MAINPID见上文。 请注意为此设置指定一个命令通常是不够的该命令仅要求服务终止例如通过为其排队某种形式的终止信号但不等待它这样做。由于服务的其余进程在命令退出后立即根据KillMode 和KillSignal 被杀死这可能不会导致干净停止。因此指定的命令应该是同步操作而不是异步操作。 请注意ExecStop 中指定的命令仅在服务首次成功启动时执行。如果服务从未启动过或者启动失败则不会调用它们例如因为ExecStart ExecStartPre 或ExecStartPost中指定的任何命令失败并且没有以“ - ”为前缀 见上文或超时。当服务无法正常启动并再次关闭时使用ExecStopPost 调用命令。另请注意如果服务成功启动则始终执行停止操作即使服务中的进程自行终止或被终止也是如此。必须准备停止命令来处理这种情况。如果systemd在调用stop命令时知道主进程退出则将取消设置$ MAINPID。 服务重启请求实现为停止操作然后是启动操作。这意味着在服务重启操作期间执行ExecStop 和ExecStopPost 。 建议将此设置用于与请求干净终止的服务通信的命令。对于事后清理步骤请使用ExecStopPost 。 ExecStopPost 服务停止后执行的其他命令。这包括使用ExecStop中配置的命令的情况其中服务没有定义任何ExecStop 或服务意外退出的情况。此参数采用多个命令行遵循与ExecStart 所述相同的方案。使用这些设置是可选的。支持说明符和环境变量替换。请注意 - 与ExecStop 不同 - 当服务无法正常启动并再次关闭时将调用使用此设置指定的命令。 建议使用此设置进行清理操作即使服务无法正常启动也应执行清理操作。使用此设置配置的命令需要能够运行即使服务中途启动失败并且未完全初始化数据。由于在执行使用此设置指定的命令时服务的进程已经终止因此它们不应尝试与它们通信。 请注意使用此设置配置的所有命令都将使用服务的结果代码调用以及主进程的退出代码和状态在$ SERVICE_RESULT$ EXIT_CODE和$ EXIT_STATUS环境变量中设置请参阅systemd.exec 5详情。 RestartSec 配置重新启动服务之前的睡眠时间使用Restart 配置。 以秒为单位获取无单位值或以“5min 20s”为单位获取时间跨度值。 默认为100ms。 TimeoutStartSec 配置等待启动的时间。如果守护程序服务未在配置的时间内发出启动完成信号则该服务将被视为失败并将再次关闭。以秒为单位获取无单位值或以“5分20秒”为单位获取时间跨度值。传递“无穷大”以禁用超时逻辑。默认情况下来自管理器配置文件的DefaultTimeoutStartSec 除非使用Type oneshot在这种情况下默认情况下禁用超时请参阅systemd-system.conf5。 如果Type notify的服务发送“EXTEND_TIMEOUT_USEC …”则可能导致开始时间超出TimeoutStartSec 。第一次收到此消息必须在超出TimeoutStartSec 之前发生并且一旦开始时间超出TimeoutStartSec 服务管理器将允许服务继续启动前提是服务在指定的时间间隔内重复“EXTEND_TIMEOUT_USEC …”直到服务启动状态由“READY 1”结束。 见sd_notify3 TimeoutStopSec 此选项有两个用途。首先它配置等待每个ExecStop 命令的时间。如果其中任何一个超时则跳过后续的ExecStop 命令SIGTERM将终止该服务。如果未指定ExecStop 命令则服务立即获取SIGTERM。其次它配置等待服务本身停止的时间。如果它没有在指定的时间内终止它将被SIGKILL强制终止参见systemd.kill5中的KillMode 。以秒为单位获取无单位值或以“5分20秒”为单位获取时间跨度值。传递“无穷大”以禁用超时逻辑。默认为DefaultTimeoutStopSec 来自管理器配置文件请参阅systemd-system.conf5。 如果Type notify的服务发送“EXTEND_TIMEOUT_USEC …”则可能导致停止时间超出TimeoutStopSec 。第一次收到此消息必须在超出TimeoutStopSec 之前发生并且一旦停止时间超出TimeoutStopSec 服务管理器将允许服务继续停止前提是服务在指定的时间间隔内重复“EXTEND_TIMEOUT_USEC …” 或终止自身见sd_notify3。 TimeoutAbortSec 此选项配置由于看门狗超时而中止服务时等待服务终止的时间请参阅WatchdogSec 。如果服务具有短的TimeoutStopSec 此选项可用于为系统提供更多时间来编写服务的核心转储。到期时SIGKILL将强制终止服务参见systemd.kill5中的KillMode 。在这种情况下核心文件将被截断。使用TimeoutAbortSec 为每个服务的核心转储设置合理的超时该超时足以写入所有预期数据同时还足够短以在适当的时间处理服务故障。 以秒为单位获取无单位值或以“5分20秒”为单位获取时间跨度值。传递一个空值以跳过专用的看门狗中止超时处理并回退TimeoutStopSec 。传递“无穷大”以禁用超时逻辑。默认为DefaultTimeoutAbortSec 来自管理器配置文件请参阅systemd-system.conf5。 TimeoutSec 将TimeoutStartSec 和TimeoutStopSec 配置为指定值的简写。 TimeoutCleanSec 配置通过systemctl clean …请求的清理操作的超时有关详细信息请参阅systemctl1。 采用通常的时间值并默认为无穷大即默认情况下不应用超时。 如果配置了超时则在超时时强制中止清除操作可能会在磁盘上留下资源。 RuntimeMaxSec 配置服务运行的最长时间。 如果使用此服务并且服务已激活超过指定时间则它将终止并进入故障状态。 请注意此设置对Type oneshot服务没有任何影响因为它们在激活完成后立即终止。 传递“infinity”默认值以配置无运行时限制。 如果Type notify的服务发送“EXTEND_TIMEOUT_USEC …”则可能导致运行时扩展到RuntimeMaxSec 之外。 第一次收到此消息必须在超过RuntimeMaxSec 之前发生并且一旦运行时间超出RuntimeMaxSec 服务管理器将允许服务继续运行前提是服务在指定的时间间隔内重复“EXTEND_TIMEOUT_USEC …” 通过“STOPPING 1”或终止实现服务关闭。 见sd_notify3。 WatchdogSec 配置服务的监视程序超时。启动完成后激活看门狗。该服务必须定期用“WATCHDOG 1”调用sd_notify3即“保持活动ping”。如果两次此类调用之间的时间大于配置的时间则服务将处于失败状态并且将以SIGABRT或WatchdogSignal 指定的信号终止。通过将Restart 设置为on-failureon-watchdogon-abnormal或始终服务将自动重新启动。此处配置的时间将传递给WATCHDOG_USEC 环境变量中的已执行服务进程。如果为服务启用了监视程序支持这允许守护程序自动启用保持活动的ping操作。如果使用此选项则应将NotifyAccess 见下文设置为打开对systemd提供的通知套接字的访问权限。如果未设置NotifyAccess 则将隐式设置为main。默认为0禁用此功能。该服务可以检查服务管理器是否期望看门狗保持活动通知。有关详细信息请参阅sd_watchdog_enabled3。 sd_event_set_watchdog3可用于启用自动监视程序通知支持。 Restart 配置在服务进程退出终止或超时时是否应重新启动服务。服务进程可以是主服务进程但也可以是使用ExecStartPre ExecStartPost ExecStop ExecStopPost 或ExecReload 指定的进程之一。当进程死亡是系统操作例如服务停止或重新启动的结果时服务将不会重新启动。超时包括错过看门狗“keep-alive ping”截止日期以及服务启动重新加载和停止操作超时。 采取no, on-success, on-failure, on-abnormal, on-watchdog, on-abort, or always. 。如果设置为no默认值则不会重新启动该服务。如果设置为on-success则仅在服务进程干净地退出时才会重新启动。在此上下文中干净退出表示退出代码为0或者是SIGHUPSIGINTSIGTERM或SIGPIPE信号之一此外还有退出状态和SuccessExitStatus 中指定的信号。如果设置为on-failure则当进程以非零退出代码退出时服务将重新启动由一个信号包括核心转储但不包括上述四个信号终止当一个操作如服务超时超时以及触发配置的看门狗超时。如果设置为on-abnormal则当信号包括核心转储不包括上述四个信号操作超时或触发看门狗超时终止进程时将重新启动服务。如果设置为on-abort则仅当服务进程因未被指定为干净退出状态的未被捕获信号而退出时服务才会重新启动。如果设置为on-watchdog则仅当服务的监视程序超时到期时才会重新启动该服务。如果设置为always则服务将重新启动无论它是否干净地退出信号异常终止或超时。 SuccessExitStatus 获取退出状态定义列表除了正常成功的退出代码0和信号SIGHUPSIGINTSIGTERM和SIGPIPE之外当主服务进程返回时将被视为成功终止。退出状态定义可以是数字退出代码终止代码名称或终止信号名称以空格分隔。有关终止代码名称列表请参阅systemd.exec5中的“进程退出代码”部分对于此设置只应使用不带“EXIT_”或“EX_”前缀的部分。有关信号名称列表请参阅signal7。 此选项可能会出现多次在这种情况下合并成功退出状态列表。如果将空字符串分配给此选项则重置列表此选项的所有先前分配将不起作用。 示例1.具有SuccessExitStatus 设置的服务 SuccessExitStatus TEMPFAIL 250 SIGUSR1 退出代码75TEMPFAIL250和终止信号SIGKILL被认为是干净的服务终端。 RestartPreventExitStatus 获取退出状态定义列表当主服务进程返回时将阻止自动服务重新启动无论使用Restart 配置的重新启动设置如何。退出状态定义可以是数字退出代码或终止信号名称并以空格分隔。默认为空列表因此默认情况下配置的重新启动逻辑不会排除退出状态。例如 RestartPreventExitStatus 1 6 SIGABRT 确保退出代码1和6以及终止信号SIGABRT不会导致自动服务重启。此选项可能会出现多次在这种情况下合并了重启防止状态列表。如果将空字符串分配给此选项则会重置列表此选项的所有先前分配将不起作用。 请注意此设置对通过ExecStartPre ExecStartPost ExecStop ExecStopPost 或ExecReload 配置的进程没有影响但仅限于主服务进程即ExecStart调用的进程或取决于Type PIDFile …否则配置的主进程。 RestartForceExitStatus 获取退出状态定义列表当主服务进程返回时将强制自动重新启动服务无论使用Restart 配置的重新启动设置如何。 参数格式类似于RestartPreventExitStatus 。 RootDirectoryStartOnly 采用布尔参数。 如果为true则使用RootDirectory 选项配置的根目录有关详细信息请参阅systemd.exec5仅适用于使用ExecStart 启动的进程而不应用于其他各种ExecStartPre ExecStartPost ExecReload ExecStop 和ExecStopPost 命令。 如果为false则以相同方式将设置应用于所有已配置的命令。 默认为false。 NonBlocking 为通过基于套接字的激活传递的所有文件描述符设置O_NONBLOCK标志。 如果为true则所有文件描述符 3即除stdinstdoutstderr之外的所有文件描述符不包括通过文件描述符存储逻辑传递的文件描述符详见FileDescriptorStoreMax 将设置O_NONBLOCK标志因此为非 阻止模式。 此选项仅与套接字单元一起使用如systemd.socket5中所述并且对先前保存在文件描述符存储中的文件描述符没有影响。 默认为false。 NotifyAccess 控制对服务状态通知套接字的访问可通过sd_notify3调用访问。采用none默认值mainexec或all之一。如果不是则不从服务进程接受任何守护程序状态更新则忽略所有状态更新消息。如果是main则仅接受从服务的主进程发送的服务更新。如果是exec则只接受来自其中一个Exec * 命令的任何主进程或控制进程发送的服务更新。如果全部则接受来自服务控制组的所有成员的所有服务更新。应该将此选项设置为在使用Type notify或WatchdogSec 时打开对通知套接字的访问参见上文。如果使用了这些选项但未配置NotifyAccess 则会将其隐式设置为main。 请注意仅当PID 1处理消息时发送过程仍然存在或者服务管理器明确地运行时跟踪发送过程时sd_notify通知才能正确归因于单元。如果服务管理器最初分离该进程即在与main或exec匹配的所有进程上则后者就是这种情况。相反如果单元的辅助进程发送sd_notify消息并立即退出则服务管理器可能无法将消息正确地归属到单元因此将忽略它即使NotifyAccess all已为其设置 Sockets 指定此服务从服务启动时继承套接字文件描述符的套接字单元的名称。 通常没有必要使用此设置因为所有套接字文件描述符的单位与服务的名称相同当然不同的单位名称后缀将传递给生成的进程。 请注意相同的套接字文件描述符可以同时传递给多个进程。 另请注意传入的套接字流量可能会激活不同的服务而不是最终配置为继承套接字文件描述符的服务。 或者换句话说.socket单元的Service 设置不必与它所引用的.service的Sockets 设置的倒数相匹配。 此选项可能会出现多次在这种情况下合并插槽单元列表。 请注意一旦设置则不支持再次清除套接字列表例如通过将空字符串分配给此选项。 FileDescriptorStoreMax 使用sd_pid_notify_with_fds3的“FDSTORE 1”消息配置服务管理器中可以存储多少文件描述符。这对于实现可在显式请求或崩溃后重新启动而不会丢失状态的服务非常有用。在重启期间不应关闭的任何打开的套接字和其他文件描述符都可以这种方式存储。应用程序状态可以序列化为/ run中的文件或者更好存储在memfd_create2内存文件描述符中。默认为0即没有文件描述符可以存储在服务管理器中。从特定服务传递到服务管理器的所有文件描述符将在下次服务重新启动时传递回服务的主进程。传递给服务管理器的任何文件描述符在它们上面看到POLLHUP或POLLERR时自动关闭或者当服务完全停止且没有作业排队或正在执行时。如果使用此选项则应将NotifyAccess 参见上文设置为打开对systemd提供的通知套接字的访问权限。如果未设置NotifyAccess 则将隐式设置为main。 USBFunctionDescriptors 配置包含USB FunctionFS描述符的文件的位置以实现USB小工具功能。 这仅与配置了ListenUSBFunction 的套接字单元一起使用。 打开后该文件的内容将写入ep0文件。 USBFunctionStrings 配置包含USB FunctionFS字符串的文件的位置。 行为类似于USBFunctionDescriptors above。 OOMPolicy 配置内存不足OOM杀手策略。在Linux上当内存变得稀缺时内核可能会决定终止正在运行的进程以释放内存并降低内存压力。此设置采用继续停止或终止之一。如果设置为继续并且内核的OOM杀手杀死了服务进程则会记录该服务但服务仍在继续运行。如果设置为停止则会记录事件但服务管理器会彻底终止该服务。如果设置为kill并且其中一个服务的进程被OOM杀手杀死则内核被指示杀死该服务的所有剩余进程。默认为设置Default.OMPolicy 在system.conf5中设置为但Delegate 打开的服务除外它默认为继续。
3、[Install]区块定义如何安装这个配置文件即怎样做到开机启动
这个设置非常重要如果设置开机自启动在/etc/systemd/system目录下面的multi-user.target.wants子目录之中机会创建一个服务的软链接
WantedBy字段表示该服务所在的 Targetarget的含义是服务组表示一组服务它可以设置的值如下 multi-user.target 表示多用户命令行状态 graphical.target 表示图形用户状态它依赖于multi-user.target
三、注册服务实例
配置文件目录 systemctl脚本目录 /usr/lib/systemd/ 系统服务目录 /usr/lib/systemd/system/
四、以下是一个简单自定义脚本服务仅供参考
添加注册脚本服务文件(vim /usr/lib/systemd/system/xxxxxxx.service)文件内容如下 [Unit] Description这是一个自定义的脚本服务 Afternetwork.target [Service] Typesimple ExecStart/bin/sh /server/scripts/xxx.sh #启动脚本/命令必须有 #ExecStop/bin/sh /server/scripts/xxxx.sh #服务停止脚本/命令 可以没有 TimeoutStopSec60 KillModecontrol-group [Install] WantedBygraphical.target WantedBymulti-user.target 自定义脚本写完之后添加权限 chmod 777 /usr/lib/systemd/system/xxxxxxx.service
添加到系统服务 systemctl daemon-reload
添加到系统服务之后就可以使用systemclt命令控制该服务的自启动。 systemctl enable auto.service
方法二 使用chkconfig自定义开机启动服务
chkconfig命令主要用来更新启动或停止和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务它只是简单的改变了符号连接。
将需要自动启动的脚本/etc/rc.d/init.d目录下然后用命令chkconfig --add filename将自动注册开机启动和关机关闭。实质就是在rc0.d-rc6.d目录下生成一些文件连接这些连接连接到/etc/rc.d /init.d目录下指定文件的shell脚本
使用语法
chkconfig --list [name] chkconfig --add name chkconfig --del name chkconfig [--level levels] name on|off|reset chkconfig [--level levels] name
Chkconfig有五个很明确的功能为管理增加一个新的功能、删除一个功能、列出当前服务的启动信息、改变一个服务的启动信息和检测特殊服务的启动状态。
chkconfig 在没有参数运行时显示用法。如果加上服务名那么就检查这个服务是否在当前运行级启动。如果是返回true否则返回false。如果在服务名后面指 定了onoff或者reset那么chkconfig 会改变指定服务的启动信息。on和off分别指服务被启动和停止reset指重置服务的启动信息无论有问题的初始化脚本指定了什么。on和off开 关系统默认只对运行级345有效但是reset可以对所有运行级有效。 参数用法 --add 增加所指定的系统服务让chkconfig指令得以管理它并同时在系统启动的叙述文件内增加相关数据。 --del 删除所指定的系统服务不再由chkconfig指令管理并同时在系统启动的叙述文件内删除相关数据。 --level等级代号 指定读系统服务要在哪一个执行等级中开启或关毕。 等级0表示表示关机 等级1表示单用户模式 等级2表示无网络连接的多用户命令行模式 等级3表示有网络连接的多用户命令行模式 等级4表示不可用 等级5表示带图形界面的多用户模式 等级6表示重新启动 需要说明的是level选项可以指定要查看的运行级而不一定是当前运行级。对于每个运行级只能有一个启动脚本或者停止脚本。当切换运行级时init不会重新启动已经启动的服务也不会再次去停止已经停止的服务。 chkconfig --list [name]显示所有运行级系统服务的运行状态信息on或off。如果指定了name那么只显示指定的服务在不同运行级的状态。 chkconfig --add name增加一项新的服务。chkconfig确保每个运行级有一项启动(S)或者杀死(K)入口。如有缺少则会从缺省的init脚本自动建立。 chkconfig --del name删除服务并把相关符号连接从/etc/rc[0-6].d删除。 chkconfig [--level levels] name设置某一服务在指定的运行级是被启动停止还是重置。 运行级文件
每 个被chkconfig管理的服务需要在对应的init.d下的脚本加上两行或者更多行的注释。第一行告诉chkconfig缺省启动的运行级以及启动和 停止的优先级。如果某服务缺省不在任何运行级启动那么使用 - 代替运行级。第二行对服务进行描述可以用\ 跨行注释。
例如random.init包含三行
# chkconfig: 2345 20 80
# description: Saves and restores system entropy pool for \
# higher quality random number generation. 使用范例
chkconfig --list #列出所有的系统服务
chkconfig --add httpd #增加httpd服务
chkconfig --del httpd #删除httpd服务
chkconfig --level httpd 2345 on #设置httpd在运行级别为2、3、4、5的情况下都是on开启的状态
chkconfig --list #列出系统所有的服务启动情况
chkconfig --list mysqld #列出mysqld服务设置情况
chkconfig --level 35 mysqld on #设定mysqld在等级3和5为开机运行服务--level 35表示操作只在等级3和5执行on表示启动off表示关闭
chkconfig mysqld on #设定mysqld在各等级为on“各等级”包括2、3、4、5等级 如何增加一个服务
1.服务脚本必须存放在/etc/ini.d/目录下
2.chkconfig --add servicename 在chkconfig工具服务列表中增加此服务此时服务会被在/etc/rc.d/rcN.d中赋予K/S入口了
3.chkconfig --level 35 servicename on
修改服务的默认启动等级。
示例auto_run的前三行如下 #!/bin/sh #chkconfig: 2345 80 90 #description:auto_run 第一行告诉系统使用的shell,所以的shell脚本都是这样。 第二行chkconfig后面有三个参数2345,80和90告诉chkconfig程序需要在rc2.d~rc5.d目录下创建名字为 S80auto_run的文件连接连接到/etc/rc.d/init.d目录下的的auto_run脚本。第一个字符是S系统在启动的时候运行脚本auto_run就会添加一个start参数告诉脚本现在是启动模式。同时在rc0.d和rc6.d目录下创建名字为K90auto_run的文件连接第一个字符为K系统在关闭系统的时候会运行auto_run添加一个stop告诉脚本现在是关闭模式。 注意上面的三行中第二第一行是必须的否则在运行chkconfig --add auto_run时会报错。 4. 常见的错误 “服务不支持 chkconfig” 请注意检查脚本的前面是否有完整的两行 #chkconfig: 2345 80 90 #description:auto_run 在脚本前面这两行是不能少的否则不能chkconfig命令会报错误 脚本案例 Vim auto-run #! /bin/sh #chkconfig: 2345 80 90 # description: # auto_run sh SH_PATH/usr/local/auto-run START_OPTIONSstart STOP_OPTIONSstop start() { echo -n $Starting :auto_run /bin/bash $SH_PATH $START_OPTIONS } stop() { echo -n $Shutting down :auto_run /bin/bash $SH_PATH $STOP_OPTIONS } [ -f $SH_PATH ] || exit 1 # See how we were called. case $1 in start) start ;; stop) stop ;; restart) stop sleep 3 start ;; *) echo $Usage: $0 {start|stop|restart} exit 1 esac exit 0
cp auto_run /etc/init.d/auto-run
增加auto-run服务 chkconfig --add auto-run
添加服务后可以使用--level命令来设置运行级别
--del命令 删除服务 语法 chkconfig --del 服务名
例:删除刚才添加的auto-run服务
chkconfig --del auto-run
注意事项
1. chkconfig不会自动禁止或激活一个服务 如上面我将memcached运行设置为 --level 2345 memcached on 如果memcached在当前级别下未启动 那么执行chkconfig后也不会自动启动
启动脚本需在/etc/init./下才可以执行删除和新增 同上理 删除和新增服务后 该服务也不会自行启动或者停止
方法三通过添加命令或脚本到/etc/rc.d/rc.local里面的方式实现开机自启动服务
该 /etc/rc.d/rc.local 文件默认没有执行权限需要手动添加执行权限才可以使用。 chmod 777 /etc/rc.d/rc.local
添加权限之后将需要执行的命令或脚本添加至该文件中即可。如下图所示