/etc/systemd/system/xxxx.service
[Unit]
Description={{service_name}} Service
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
User={{rio_user|default('root')}}
Group={{rio_group|default('root')}}
Type={{systemd_type | default('simple')}}
EnvironmentFile={{rio_env_file}}
WorkingDirectory={{ work_dir }}
ExecStart={{ exec_start }}
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
redis 启动
cat > /etc/systemd/system/redis.service << 'EOF'
[Unit]
Description=redis
After=network.target
[Service]
Type=forking
#PIDFile=/data/solution/redis/pidfile/redis.pid
WorkingDirectory=/data/solution/redis
ExecStart=/data/solution/redis/redis-server /data/solution/redis/redis.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
Restart=always
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
EOF
redis_watch_proxy
cat > /etc/systemd/system/redis-watch-proxy.service << 'EOF'
[Unit]
Description=redis-watch-proxy Service
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
User=root
Group=root
Type=simple
WorkingDirectory=/data/solution/redis-watch-proxy
ExecStart=/data/solution/redis-watch-proxy/redis-watch-proxy
Restart=always
RestartSec=5
LimitNOFILE=65536
LimitNPROC=infinity
LimitMEMLOCK=infinity
[Install]
WantedBy=multi-user.target
EOF
apigate
cat > /etc/systemd/system/apigate.service << 'EOF'
[Unit]
Description=apigate Service
After=network-online.target
Wants=network-online.target
Requires=redis.service
Requires=redis-watch-proxy.service
[Service]
User=root
Group=root
Type=simple
WorkingDirectory=/data/solution/apigate
ExecStart=/data/solution/apigate/bin/node \
/data/solution/apigate/proxy.js \
--max_old_space_size=8192 \
--max_semi_space_size=64
Restart=always
RestartSec=5
LimitNOFILE=655360
LimitNPROC=infinity
LimitMEMLOCK=infinity
[Install]
WantedBy=multi-user.target
EOF
filebeat
cat > /etc/systemd/system/filebeat.service << 'EOF'
[Unit]
Description=filebeat Service
[Service]
User=root
Group=root
Type=simple
WorkingDirectory=/data/filebeat
ExecStart=/data/filebeat/bin/filebeat_new \
-c /data/filebeat/etc/filebeat_new.yml \
-path.home /data/filebeat \
-path.config /data/filebeat/etc \
-path.data /data/filebeat/data \
-path.logs /data/filebeat/log
Restart=always
RestartSec=5
LimitNOFILE=65536
LimitNPROC=infinity
LimitMEMLOCK=infinity
[Install]
WantedBy=multi-user.target
EOF
metricbeat
cat > /etc/systemd/system/metricbeat.service << 'EOF'
[Unit]
Description=metricbeat Service
[Service]
User=root
Group=root
Type=simple
WorkingDirectory=/data/metricbeat
ExecStart=/data/metricbeat/metricbeat
Restart=always
RestartSec=5
LimitNOFILE=65536
LimitNPROC=infinity
LimitMEMLOCK=infinity
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable redis redis-watch-proxy apigate filebeat metricbeat
systemctl start redis redis-watch-proxy apigate filebeat metricbeat
相关参数
[Unit] 服务的说明
Description= 描述服务
Documentation= 文档地址
Requires= 当前 Unit 依赖的其他 Unit
Wants= 与当前 Unit 配合的其他 Unit
BindsTo= 与 Requires 类似,其指定的 Unit 如果退出,则当前 Unit 也将停止运行
Before= 该字段指定的 Unit 要启动,那么必须在当前 Unit 之后启动
After= 该字段指定的 Unit 要启动,那么必须在当前 Unit 之前启动
Conflicts= 该字段指定的 Unit 不能与当前 Unit 同时启动
[Service] 服务运行参数的设置
Environment= 设置环境变量
Type=forking 是后台运行的形式
ExecStartPre= 启动当前服务之前执行的命令
ExecStart= 服务的具体运行命令
ExecStartPost= 启动当前服务之后执行的命令
ExecReload= 重启命令
ExecStop= 停止命令
ExecStopPost= 停止当前服务之后执行的命令
RestartSec= 自动重启当前服务间隔的秒数
Restart= 定义何种情况 systemd 会自动重启当前服务,可能的值包括 always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog
TimeoutSec 定义 systemd 停止当前服务之前等待的秒数
# [Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]
WantedBy= 值为一个或多个 Target,当前 Unit 被 enable 时,符号链接放到 /etc/systemd/system/ 目录下面
# 以 Target+ .wants 后缀构成的子目录中
RequireBy=
Alias= 当前 Unit 可用于启动的别名
Also= 当前 Unit 被 enable 时,激活该字段指定的 Unit