简介
ubuntu作为服务器使用时,常常需要在机器重启时能自动启动我们开发的服务。
Ubuntu 16.10开始不再使用initd管理系统,改用systemd,包括用systemctl命令来替换了service和chkconfig的功能。
systemd 默认读取 /etc/systemd/system 下的配置文件,该目录下的文件会链/lib/systemd/system/下的文件。
不同于以往的版本,ubuntu18.04默认不带/etc/rc.local文件,我们需要通过配置来让rc-local.service生效。
然后我们就可以像以前那样,直接把启动脚本写入/etc/rc.local文件,这样机器启动时就会自动运行它。
rc.local启动脚本
查看所有服务
ls /lib/systemd/system # 可以看到很多服务,这样不便于确认指定的服务是否存在
ls /lib/systemd/system | grep rc # 找到我们关心的rc-local.service服务
修改服务配置
sudo vi /lib/systemd/system/rc-local.service
打开后可以看到,文件包含[Unit]和[Service]两个部分内容
一般启动文件需要三个部分:
[Unit] 启动顺序与依赖关系
[Service] 启动行为, 如何启动,启动类型
[Install] 定义如何安装这个配置文件,即怎样做到开机启动
在文件最后加入以下内容:
[Install]
WantedBy=multi-user.target
Alias=rc-local.service
创建执行文件
sudo vi /etc/rc.local
写入以下内容:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
time=$(date)
echo $time > /odoo16/rc-local-info.log # 这个是你的实际接收脚本启动日志的路径
# add your scritp here
python3 /odoo16/src/odoo-bin -c /odoo16/odoo.conf # 这个是你的实际项目路径
exit 0
为rc.local加执行权限:
sudo chmod +x /etc/rc.local
建立软链接
systemd 默认读取 /etc/systemd/system 下的配置文件, 所以还需要在 /etc/systemd/system 目录下创建软链接
sudo ln -s /lib/systemd/system/rc-local.service /etc/systemd/system/
启用服务并启动
sudo systemctl enable rc-local
sudo systemctl start rc-local.service # 一直等待,可以不用理它,重启测试即可
sudo systemctl status rc-local.service
重启检查:
cat /odoo16/rc-local-info.log
# Thu 26 Oct 2023 11:36:09 AM CST