代码改变世界

Linux 开机自启

2020-04-21 18:58  清晨、午后  阅读(408)  评论(0编辑  收藏  举报

1. 后台服务自启动

方法一、

a. 可以把需要在开机后启动执行的命令写入如下文件(Ubuntu 测试OK)

/etc/rc.local

方法二(适用于 init.d 守护程序 和 GUI 程序)

a. 自定义服务(init.d 守护程序)

以 ceph 服务为例,创建文件 /usr/lib/systemd/system/ceph.service ,并写入如下内容(修改该文件后执行 systemctl daemon-reload 使该文件生效)

[Unit]
Description= ceph Service
After=syslog.target network.target

[Service]
PIDFile=/run/ceph.pid
ExecStart=/opt/vpservice/vsims/ceph/start.sh
ExecStop=/opt/vpservice/vsims/ceph/stop.sh
KillMode=process
Restart=always
RestartSec=2s
StartLimitInterval=0 [Install] WantedBy
=multi-user.target

 注意:/opt/vpservice/vsims/ceph/start.sh 正常退出后,会调用 ExecStop=/opt/vpservice/vsims/ceph/stop.sh

参数解释

estart=always: 只要不是通过systemctl stop来停止服务,任何情况下都必须要重启服务,默认值为no

RestartSec=2s: 重启间隔,比如某次异常后,等待5(s)再进行启动,默认值0.1(s)

StartLimitInterval=0: 无限次重启,默认是10秒内如果重启超过5次则不再重启,设置为0表示不限次数重启

然后就可以用  service ceph start 命令启动 ceph 服务了,其实就是执行 /opt/vpservice/vsims/ceph/start.sh 脚本,该脚本具体启动相关进程

Systemd 配置项详见如下链接:

http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html

b. 设置开机自启动

systemctl enable ceph  // 执行后会在 /etc/systemd/system/multi-user.target.wants 下生成 /usr/lib/systemd/system/ceph.service 的连接文件

systemctl disable ceph  // 执行后会取消 /usr/lib/systemd/system/ceph.service 的连接文件

c. 自定义服务(GUI 程序)

以 kmsd 服务为例,创建文件 /usr/lib/systemd/user/kmsd.service,并写入如下内容(修改该文件后执行 systemctl daemon-reload 使该文件生效)

[Unit]
Description= kms daemon service
After=display-manager.service

[Service]
ExecStart=/usr/bin/kmstools  // 一个 GUI 应用程序
Restart=always

[Install]
WantedBy=default.target

 

d. 设置开机自启动

systemctl --user enable kmsd.service  // 注意该命令无法在 root 权限下执行 

e.停止服务通用脚本
#!/bin/bash
NAME=ceph-fuse
echo -en "\033[1;32m info: \033[0m"
echo "service name $NAME"
ID=`ps -ef | grep "$NAME" | grep -v "$0" | grep -v "grep" | awk '{print $2}'`
echo -en "\033[1;32m info: \033[0m"
echo "pid list:"$ID
echo "---------------"
for id in $ID
do
kill -9 $id
echo "killed $id"
done
echo "---------------"



NAME=ceph
echo -en "\033[1;32m info: \033[0m"
echo "service name $NAME"
ID=`ps -ef | grep "$NAME" | grep -v "$0" | grep -v "grep" | awk '{print $2}'`
echo -en "\033[1;32m info: \033[0m"
echo "pid list:"$ID
echo "---------------"
for id in $ID
do
kill -9 $id
echo "killed $id"
done
echo "---------------"

 

2. 桌面应用自启动(执行一次,失败后不在尝试)

创建 /etc/xdg/autostart/vrvclouddisk.desktop 文件内容如下

[Desktop Entry]
Name=云盘
Name[zh_CN]=云盘
Comment=vrvclouddisk client
Exec=/opt/MJBZGL/DZWDGL/VRV/vrvclouddisk.sh  // 启动时执行的脚本
Icon=/opt/MJBZGL/DZWDGL/VRV/linux-unpacked/resources/renderer/assets/img/tray_red.png
Terminal=false
Type=Application
Categories=System
Encoding=UTF-8
StartupNotify=true

 Ubuntu 开机进入桌面之后会执行/etc/xdg/autostart/文件中的脚本




-------------------------------------
Restart=always