Service.Type

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

经常使用的有 simpleforking ,那么应该如何判断使用哪个呢?

  • simple:正常前台运行的程序,不会fork新的进程,前台结束整个程序就结束了。简单说就是会把shell“卡住”的程序。只要程序还“卡”着shell,Systemd就认为程序在运行。一旦程序“放开”shell了,Systemd就认为程序结束了。
  • forking:一般后台运行的程序,真正的运行进程是fork出的进程,当前进程只是一个类似“启动器”的角色。Systemd对这个的判断和 simple 在某些地方正好相反。只有前台结束了,Systemd才认为程序启动完成。

参考链接:https://blog.csdn.net/Sardkit/article/details/79911925

Service.EnvironmentFile

该参数可以指向一个配置环境变量的文件。
文件格式可以参考 sshd 的配置。

  1. # Configuration file for the sshd service.
  2. # The server keys are automatically generated if they are missing.
  3. # To change the automatic creation uncomment and change the appropriate
  4. # line. Accepted key types are: DSA RSA ECDSA ED25519.
  5. # The default is "RSA ECDSA ED25519"
  6. # AUTOCREATE_SERVER_KEYS=""
  7. # AUTOCREATE_SERVER_KEYS="RSA ECDSA ED25519"
  8. # Do not change this option unless you have hardware random
  9. # generator and you REALLY know what you are doing
  10. SSH_USE_STRONG_RNG=0
  11. # SSH_USE_STRONG_RNG=1