linux添加开机启动项

Linux系统启动时加载的配置文件有:/etc/profile、/root/.bash_profile、/etc/bashrc、/root/.bashrc、/etc/profile.d/*.sh、/etc/profile.d/lang.sh、/etc/sysconfig/i18n、/etc/rc.local(/etc/rc.d/rc.local)

添加自定义开机启动项的方式有:

修改开机启动文件/etc/rc.local(或者/etc/rc.d/rc.local)

在文件末尾(exit 0之前)加上开机需要启动的程序或执行的命令。执行的程序需要写绝对路径,除非已经添加到了环境变量,比如:

1
/usr/demo &

自己写一个shell脚本

将写好的脚本(.sh文件)放到目录/etc/profile.d/下,系统启动后会自动执行该目录下的所有shell脚本。

1
2
3
cd /etc/profile.d/
touch demo.sh
vi demo.sh

添加启动命令:

1
2
#!/bin/sh
/usr/demo

通过chkconfig命令设置

将启动文件demo拷贝到/etc/init.d或者/etc/rc.d/init.d/(前者是后者的软链接)下,编辑启动文件,

1
2
3
cd /etc/init.d/
cp ~/demo .
vi demo

在文件最前面添加以下三行,否则会提示chkconfig不支持:

1
2
3
#!/bin/sh 告诉系统使用的shell,shell脚本都是这样
#chkconfig: 35 20 80 分别表示运行级别,启动优先权,关闭优先权,此行代码必须
#description: pumpkin 描述文字,此行代码必须

关闭编辑,执行以下命令,就添加了:

1
chkconfig --add

Systemctl管理的自定义服务文件

自定义服务文件,添加到系统服务,然后通过Systemctl管理

  1. 自定义一个服务文件,可参考nginx.service、redis.service、supervisord.service等:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [Unit]:服务的说明
    Description:描述服务
    After:描述服务类别

    [Service]服务运行参数的设置
    Type=forking 是后台运行的形式
    ExecStart 为服务的具体运行命令
    ExecReload 为服务的重启命令
    ExecStop 为服务的停止命令
    PrivateTmp=True 表示给服务分配独立的临时空间
    注意:启动、重启、停止命令全部要求使用绝对路径

    [Install] 服务安装的相关设置,可设置为多用户
    WantedBy=multi-user.target
  2. 将文件保存到目录/usr/lib/systemd/system下,以754权限。

  3. 设置开机自启动,systemctl daemon-reload.

  4. 其他可能用到的命令有:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    systemctl enable nginx.service # 设置开机启动
    systemctl disable nginx.service # 关闭开机启动
    systemctl is-enabled nginx

    # 启动nginx服务
    systemctl start nginx.service

    # 停止nginx服务
    systemctl start nginx.service

    #重启nginx服务
    systemctl restart nginx.service

    # 查看nginx服务当前状态
    systemctl status nginx.service

    # 查看所有已启动的服务
    systemctl list-units --type=service
  5. 举例,nginx.service服务文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [Unit]
    Description=nginx - high performance web server
    After=network.target remote-fs.target nss-lookup.target

    [Service]
    Type=forking
    ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
    ExecReload=/usr/local/nginx/sbin/nginx -s reload
    ExecStop=/usr/local/nginx/sbin/nginx -s stop

    [Install]
    WantedBy=multi-user.target