参考:
- systemctl基本操作命令:https://my.oschina.net/u/3497124/blog/1439293
- 基本用法: https://linux.cn/article-5926-1.html
- 配置说明: https://blog.linuxeye.com/400.html
- 英文说明:https://www.freedesktop.org/software/systemd/man/systemd.service.html
- 完整的说明(英文):https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files
配置参数说明:
-
symbol “@”
- Template and Instance Unit Names
- http://superuser.com/questions/393423/the-symbol-and-systemctl-and-vsftpd
- 使用@可以参数化服务名,当一个服务在一台机器起多个实例,如果不想生成多个服务名,可以通过参数来控制。配置文件里使用%i 代理 服务名@后的内容。如systemctl start mysql@3306,%i为3306
-
[unit]
- Description: 服务描述,打印服务的时候显示
- After:依赖服务,必须在依赖服务启动后启动
- syslog.target, 系统日志服务
- network.target,网络服务
-
[service]
- User: 启动用户
- Group: 启动的用户组
- type:启动方式,
- simple(默认)
- forking(启动后自动进入后台的进程,需要使用该方式)
- 其它方式一般用不到
- ExecStart:启动方式
- ExecStop:停止方式
- PIDFILE: 指定pid文件,监控进程状态,type=forking时,必须指定
- Restart:重启条件,
- always始终重启,即使是systemctl stop关掉了,也会重启
- on-success,成功退出时
- on-failure,进程退出状态不正常,默认为0,可以使用SuccessExitStatus指定
- on-abnormal,进程超时,用户取消,watchdog
- on-watchdog,watchdog关掉进程时
- on-abort,用户取消
- no, 不重启,默认值
- PrivateTmp:为进程分配单独的临时空间
-
[install]
- WantedBy,当前服务的加载方式
应用实例
注意事项:
- 在“.service”文件中使用命令的绝对路径
- 当服务有特定的运行用户、运行环境是需要指定:user、group、environmentfile
- 根据服务的特点调整参数的使用
1. systemctl添加mysql服务 "@"管理多实例
该脚本使用于启动多个mysql实例的环境,如果想管理单个MySQL进程,只需要将“%i”换成具体的参数就好(mysql单实例管理可参考:http://blog.csdn.net/shen2308/article/details/78492460)。
[Unit]
Description=MySQL Multi Server for instance %i
After=syslog.target
After=network.target
[Service]
User=mysql
Group=mysql
Type=forking
ExecStart=/usr/bin/mysqld_multi start %i
ExecStop=/usr/bin/mysqld_multi stop %i
Restart=always
PrivateTmp=true
[Install]
WantedBy=multi-user.target
#管理命令
systemctl start/stop/status/restart [email protected]
2. systemctl添加tomcat服务
[Unit]
Description=Tomcat of rapapi
After=syslog.target network.target
[Service]
#指定用户
User=root
Group=root
Type=forking
#因为tomcat使用信号管理进程,所以需要指定pid文件
PIDFile=/usr/share/apache-tomcat-7.0.72/tomcat.pid
ExecStart=/usr/share/apache-tomcat-7.0.72/bin/startup.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
管理命令: systemctl start/stop/status/restart ProcessName.service
3. systemctl添加jenkins服务
[Unit]
Description=Jenkins Control With Resin
After=syslog.target
After=network.target
[Service]
User=root
Group=root
ExecStart=/bin/bash /root/resin-3.1.12/bin/httpd.sh
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
4. systemctl添加redmine服务
[Unit]
Description=Redmine Control
After=syslog.target
After=network.target
[Service]
User=redmine
Group=redmine
#指定虚拟环境文件
EnvironmentFile=-/home/redmine/redmine-2.5.1/rails.env
WorkingDirectory=/home/redmine/redmine-2.5.1
ExecStart=/usr/local/rvm/src/rvm/rubies/ruby-2.0.0-p648/bin/ruby /home/redmine/redmine-2.5.1/script/rails server webrick -e production -p 4000
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
5. systemctl添加falcon服务
[Unit]
Description=Open Falcon Agent Service
After=network.target
[Service]
WorkingDirectory=/home/falcon/agent
ExecStart=/home/falcon/agent/falcon-agent -c /home/falcon/agent/cfg.json >> /dev/null 2>&1
StandardOutput=null
Restart=on-failure
RestartSec=15
[Install]
WantedBy=multi-user.target
rsync配置文件
# /etc/rsyncd: configuration file for rsync daemon mode
# See rsyncd.conf man page for more options.
# configuration example:
# uid = nobody
# gid = nobody
# use chroot = yes
# max connections = 4
# pid file = /var/run/rsyncd.pid
# exclude = lost+found/
# transfer logging = yes
# timeout = 900
# ignore nonreadable = yes
# dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
# [ftp]
# path = /home/ftp
# comment = ftp export area
uid = nobody
gid = nobody
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
[m_log]
path=/data/logs/
ignore erros
read only = false
list = false
hosts allow=10.9.12.2
hosts deny=*
说明:rsync服务只对指定ip开放连接权限,提升服务的安全性!!!