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