文章目录

  • linux设置开机启动有几种方法
  • 1. 编辑rc.loacl脚本
  • 2. 把程序添加为系统服务
  • 2.1 创建程序的系统文件
  • 2.2 设置开机启动
  • 3. 不好用的方法


linux设置开机启动有几种方法

设置linux开机启动有3种方法

1. 编辑rc.loacl脚本

linux在开机启动的时候会运行/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.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi
##在 下面添加要开机启动的程序和脚本即可

sudo nohup /home/pi/frp/start.sh &

## 注意的地方是,要加上&,让程序在后台运行,如果你的程序是死循环那种,就进不去系统了,尽量也加上nohup。
exit 0

这个方法,虽然简单,但是我发现不是所有程序都能这样,放到启动脚本中就能开机启动,我曾经写过几个程序进行开机启动设置,但发现开机后程序并没有运行起来,这就是让我很纳闷的原因,下面是我从网上找的分析原因,但经过测试还是无法开机启动。

  • /etc/rc.local没有执行权限,修改权限之后,还是无法解决(网上有人说可以)
  • 路径没有编写绝对路径(这个有可能,但是发现绝对路径正确了,我的程序还是没有开机启动)
  • sh兼容性问题,重新进行软链接(参考https://www.mmuaa.com/post/4e728a88a1a68e13.html)

最后都没运行起来。然后我猜想,是不是因为系统其实还没有完全跑起来。到时我的程序不能运行,基于这一点,我做了一下延时

sleep(10)
sudo nohup /home/pi/frp/start.sh &

果然这次程序运行起来了,虽然没有发现真正的原因。暂时没发现有程序没有跑起来,暂时这么解决。

2. 把程序添加为系统服务

2.1 创建程序的系统文件

cd /usr/lib/systemd/system
sudo nano frp.service #命名按照**.service定义

复制一下内如
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
#对你程序的描述

[Service]
Type = simple #参看下面给出的链接
ExecStart = /home/pi/frp/frpc -c /home/pi/frp/frpc.ini #修改为你程序的绝对路径即可

下面是官网系统程序配置解释
https://www.freedesktop.org/software/systemd/man/systemd.service.html

下面是我配置的demo,可以参考
[Unit]
Description=frpc
Wants=network-online.target
After=network.target network-online.target
Requires=network-online.target

[Service]
ExecStart=开机启动程序的路径
ExecStop=/bin/kill $MAINPID
Restart=always
RestartSec=5
StartLimitInterval=0

[Install]
WantedBy=multi-user.target

2.2 设置开机启动

sudo systemctl disable frpc
sudo systemctl enable frpc
sudo systemctl start frpc

3. 不好用的方法

新建bash脚本放在/etc/profile.d,此文件为系统的每个用户设置环境信息。
当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。