BluePen BluePen
  • Jenkins
  • OS
  • 算法
随笔
分类
标签
归档
关于
留言板
GitHub (opens new window)

Alex

一个好人
  • Jenkins
  • OS
  • 算法
随笔
分类
标签
归档
关于
留言板
GitHub (opens new window)
  • Linux

    • 常用操作

      • 查看磁盘占用
      • 创建 systemd服务
        • 编写服务描述文件
        • 参考
      • 安装 samba服务
    • 常用命令

  • Mac

  • OS
  • Linux
  • 常用操作
Alex
2019-07-31
目录

创建 systemd服务

通常在 unix系统上部署一个程序后,希望有便捷的启动,停止,重启,状态查询等功能。使用系统自带的 systemd服务便是解决方案之一。

大概步骤如下:

  • 创建一个系统服务描述文件,eg: /etc/systemd/system/app.service
  • 启动服务, sudo systemctl start app
  • 设置开机启动,sudo systemctl enable app

-> 编写服务描述文件

有点类似yaml的格式,示例如下:

[Unit]
Description=Gunicorn instance to serve flask
After=network.target

[Service]
Type=notify
User=alex
Group=nginx
WorkingDirectory=/data/home/workspace/myproject
Environment=FLASK_ENV=production REDIS_PASSWORD=xxx MYSQL_PASSWORD=xxxx
ExecStart=/data/home/workspace/myproject/flask/bin/gunicorn --workers 2 --bind unix:app.sock -m 007 app:app
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=mixed
TimeoutStopSec=5
PrivateTmp=true

[Install]
WantedBy=multi-user.targe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  • 大小写敏感
  • 基本格式为 key=value, 等号前后的空格会被忽略
  • 注释以 #或者 ; 起始
  • 可使用 \ 连接多行为一行
  • Unit 区块描述一些元信息以及依赖,示例中给出了服务描述和网络依赖,完整的字段描述见 systemd.unit (opens new window)
  • Service 区块用来描述 Service的配置
  • Install 区块是给 systemctl enable|disable 用的,用来定义如何启动,以及是否开机启动

可以看出,重点在 Service部分, 完整的字段描述见 systemd.service (opens new window)

  • 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, 不会自动重启

    • 可能的值包括always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog
  • TimeoutSec:定义 Systemd 停止当前服务之前等待的秒数

  • Environment:指定环境变量

    • 可以定义多个环境变量值。eg:Environment=FLASK_ENV=production REDIS_PASSWORD=xxx MYSQL_PASSWORD=xxxx
  • EnvironmentFile: 从单独的文件加载环境变量

-> 常用服务命令

  • sudo systemctl systemd-analyze verify app.service, 检查服务文件
  • sudo systemctl start app, 启动服务
  • sudo systemctl stop app, 停止服务
  • sudo systemctl status app, 查看服务状态
  • sudo systemctl reload app, 重新加载一个服务的配置文件
  • sudo systemctl restart app, 先 stop再重新 start 服务
  • sudo systemctl kill app, 杀死一个服务的所有子进程
  • sudo systemctl show app, 显示服务的所有底层参数
  • sudo systemctl daemon-reload service文件有改动时,需要执行该命令重新加载
  • sudo systemctl enable app, 设置开机启动
  • sudo systemctl disable app, 禁用开机启动

-> 参考

  • Systemd (opens new window)
  • systemd-tutorial-commands (opens new window)
  • systemd-unit (opens new window)
编辑此页 (opens new window)
更新于: 2019-07-31 10:15
查看磁盘占用
安装 samba服务

← 查看磁盘占用 安装 samba服务→

Copyright © 2019-2022 | yxxy | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式