systemd

systemctl: 管理服务

  • systemd 中的服务后缀名 .service 可以不写,会自动补全。
  • systemd 中把服务称作 unit , unit 有多种类型包括 .service, .target

列出服务

   # 查看系统所有安装的服务项
   systemctl list-unit-files --type=service

   # 查看系统所有运行的服务项
   systemctl list-units --type=service

   # 查看系统所有开机自启动的服务项
   systemctl list-unit-files --type=service | grep enabled

查看特定服务

   # 查看指定服务项状态
   systemctl status <服务项名称>

   # 查看服务项的依赖关系
   systemctl list-dependencies <服务项名称>

查看系统状态

   # 查看系统启动耗时
   systemd-analyze

   # 查看各项服务启动耗时
   systemd-analyze blame | grep .service

管理服务

   # 启动服务
   systemctl start <服务项名称>

   # 停止服务
   systemctl stop <服务项名称>

   # 重启服务
   systemctl restart <服务项名称>

   # 重新读取配置文件
   # 如果该服务不能重启,但又必须使用新的配置,这条命令会很有用
   systemctl reload <服务项名称>

   # 使服务开机自启动
   systemctl enable <服务项名称>

   # 使服务不要开机自启动
   systemctl disable <服务项名称>

   # 禁用服务
   # 这可以防止服务被其他服务间接启动,也无法通过 start 或 restart 命令来启动服务。
   systemctl mask <服务项名称>

   # 不再禁用服务
   systemctl unmask <服务项名称>

   # 重新读取所有服务项
   # 修改、添加、删除服务项之后需要执行以下命令。
   systemctl daemon-reload

编写简单的服务

服务文件都存放在 /etc/systemd/system/ 中,后缀名为 .service

简单的自启动脚本

  • Type=simple 表示启动并一直运行
  • ExecStart=/... 表示要执行的命令,路径要写全
  • WantedBy=multi-user.target 表示当用户能登录的时候就该启动这个服务了
  • User=name 表示运行程序时使用的用户,默认为 root
   [Unit]
   Description=My Startup

   [Service]
   Type=simple
   ExecStart=/path/to/server --server

   [Install]
   WantedBy=multi-user.target

配置自启动 jupyterlab

/etc/systemd/system/jupyterlab.service

   # start jupyter lab
   [Unit]
   Description=jupyter lab
   After=nginx.target

   [Service]
   Type=simple
   Environment="PATH='/home/username/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games'" "PYTHONPATH='/home/username/.local/bin:/usr/lib/python39.zip:/usr/lib/python3.9:/usr/lib/python3.9/lib-dynload:/home/username/.local/lib/python3.9/site-packages:/usr/local/lib/python3.9/dist-packages:/usr/lib/python3/dist-packages:/home/username/.local/lib/python3.9/site-packages/IPython/extensions:/home/username/.ipython'"
   ExecStart=/home/username/.local/bin/jupyter lab --LabApp.app_dir=/home/username/.local/share/jupyter/lab --notebook-dir=/home/username/Projects --allow-root --config=/home/username/.jupyter/jupyter_lab_config.py

   [Install]
   WantedBy=multi-user.target

配置自动挂载

配置文件路径: /etc/systemd/system/path-to-dir.mount

注意:文件名必须是挂载路径名,例如要把 /dev/sdb1 挂载到 /mnt/sds ,配置文件应该叫做 mnt-sds.mount

   [Unit]
   Description=mount 

   [Mount]
   What=/dev/sdb1
   Where=/mnt/sds
   Options=defaults

   [Install]
   WantedBy=local-fs.target

问题

用户定义服务

  • 命令使用 systemctl --user 剩下一样。
  • 配置文件放在 $HOME/.config/systemd/user
  • 然后执行一次 loginctl enable-linger username 让开机时自启动用户

评论

Comments powered by Disqus