这两天在配单机多redis实例,发现配好之后在ubuntu15.10上无法自启,看来用sysvinit的方式不灵了,顺便研究了一下systemd,发现这东西挺好使的,不但支持服务自启,还支持job,可以替换crontab
systemd.service
几个重要的路径 /usr/lib/systemd 这是system的服务单元,所有服务单元都放这里,下面有两个目录比较重要 system和user,这俩目录相当与原来的运行级别,system的级别高于user级别,如果开机自启就用system级别就可以
/usr/lib/systemd/ 下是systemd的服务单元
/etc/systemd/ 是systemd的配置,一般用不到
首先的i编写 unit,其中unit是system中的服务配置文件的叫法
下面是个unit的例子
[Unit]
Description=Redis persistent key-value database
After=network.target #依赖network.target,如果有多个依赖,可以写多个After
[Service]
ExecStart=/usr/bin/redis-server /etc/redis.conf --daemonize no
ExecReload=/bin/kill -s HUP $MAINPID #MAINPID是个变量,指向当前服务实例的进程ID
User=redis
Group=redis
Restart=always #如果被杀掉或进程退出就自动重启
RestartSec=5s #5秒检查一次
[Install]
WantedBy=multi-user.target #安装到多用户模式
启动/关闭/重启服务
$ systemctl start redis #启动
$ systemctl stop redis #停止
$ systemctl restart redis #重启
$ systemctl reload redis #重新装入ntpd的配置
systemd状态
$ systemctl is-enabled redis #判断redis服务无是否是允许的
$ systemctl is-active redis #判断redis服务是否处于活动状态
$ systemctl enable redis.service #让redis开机自启
$ systemctl disable redis.service #让redis不开机自启
杀掉某个服务
$ systemctl kill redis.service
获取某个服务的配置
$ systemctl show redis
获取每个任务的启动耗时
$ systemd-analyze blame
获取任务之间的依赖关系
$ systemctl list-dependencies
systemd.timer
在/usr/lib/systemd/system下添加两个文件
xxxx.service,这是普通的service文件
xxxx.timer,这是定义计时器信息的计时器指令文件
首先需要用systemctl start xxx.service测一下service是否好使,然后用systemctl enable xxxx.timer来启用timer
每次修改了配置要重新载入配置,然后重启一下timer才能生效
OnCalendar=*-*-* *:*:00 #每分钟执行一次
查看systemd的日志
$ journalctl
$ journalctl -xe 查看最后的日志
$ journalctl -b #查看最后的启动日志
$ journalctl /sbin/crond #查看和crond相关的日志
$ journalctl -f #查看最后10条日志
添加服务的步骤
1.在/usr/lib/systemd/system下创建redis.service文件(开机自动执行,无界面模式也可以启动)
2. 加载配置
$ systemctl reload redis.service
3.设为自启动
$ systemctl enable redis.service
4.启动
重启或者执行
$ systemctl start redis.service
如果有异常,可以分析出错原因 $journalctl -xe 如果日志报和权限有关的错误,就考虑可能是SELinux的问题