linux关联启动程序,Linux应用程序自启动方式总结

linux关联启动程序,Linux应用程序自启动方式总结在 Linux 系统下 有多种方法可以实现程序或者脚本的自启动 本文将对这些方法进行梳理总结 使用 rc local 或 rc sysinit 这是最简单的自启动方式 适合简单程序的自启动 编辑 etc rc d rc local 文件 在该文件的末尾添加要启动的命令 例如

大家好,我是讯享网,很高兴认识大家。

在Linux系统下,有多种方法可以实现程序或者脚本的自启动,本文将对这些方法进行梳理总结。

使用rc.local或rc.sysinit

这是最简单的自启动方式,适合简单程序的自启动。编辑/etc/rc.d/rc.local文件,在该文件的末尾添加要启动的命令,例如:

/home/myusername/my_custom_app

这样my_custom_app程序就可以跟随Linux系统启动了。

也可以使用/etc/rc.d/rc.sysinit。rc.sysinit脚本用于完成系统服务程序的启动,如系统环境变量设置、设置系统时钟、加载字体、检查加载文件系统、生成系统启动信息日志文件等等。

采用服务形式启动

采用服务形式启动主要有三种方式,sysvinit、upstart和systemd。具体使用什么方式实现程序的自启动要看当前系统的启动方式。

sysvinit启动

系统运行后首先启动init程序,其PID为1,init程序是系统其他所有进程的父进程。init首先会读取/etc/inittab文件,从而确定当前Linux系统的运行级别。通常服务器的默认级别为3,图形界面模式为5。然后init会从文件/etc/fstab中查找分区挂载信息,并将各个分区挂载到相应位置。再然后,init会依次读取rc.sysinit、rc、rcX.d、rc.local,最后启动tty和login,其中X代表当前系统的运行级别。具体启动流程如下:

init->inittab(运行级别)->rc.sysinit(系统初始化)->rc->rcX.d(启停服务)->rc.local->tty和login

使用sysvinit服务形式启动,可以在/etc/init.d下建立一个脚本文件my_custom_app,内容如下:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32# description:

# ...

RETVAL=0

start()

{

...

}

stop()

{

...

}

case "$1" in

start)

start

;;

stop)

stop

;;

restart)

$0 stop

sleep 1

$0 start

;;

*)

echo $"Usage: $0 {start|stop|restart}"

exit 1

;;


讯享网

esac

exit $RETVAL

然后使用以下命令增加执行权限、建立链接:

chmod +x /etc/init.d/my_custom_app

ln -s /etc/init.d/my_custom_app /etc/rc3.d/S50MyCustomApp

可以使用以下命令设置开机自启动:

chkconfig --add my_custom_app

sysvinit是早期大多数Linux发行版采用的启动方式,但是它主要有以下两个缺点:启动时间长:因为采用串行启动的方式,只有前一个进程启动完成后,才会启动下一个进程,效率较低;

启动脚本复杂:init程序仅负责调用一下脚本,但不管其他事情,因此需要自己处理各种情况,使得脚本长而复杂。

upstart启动

upstart来源于Ubuntu Linux,使用基于事件的模型,能够尽可能启用更少的进程,并尽可能使更多进程并行启动,以解决传统sysvinit的问题。但是,upstart仍然保持着对Sysvinit启动模式的向下兼容,因此依然能够通过运行级别来管理各种服务,如使用/etc/rcX.d/目录,chkconfig工具等等。upstart不再使用单一的/etc/inittab文件,而是将各种初始化配置分散存放,用来各自响应相关的启动事件。init程序的配置目录位于/etc/init/目录中,原有的/etc/inittab文件仅保留默认运行级别的配置。

由于upstart兼容sysvinit,因此sysvinit中应用的自启动方式对于upstart仍然适用。对于upstart,还可以在/etc/init/目录下添加后缀名为conf的脚本用于自启动,示例如下:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15# My test service - Upstart script demo description "Here goes the description of 'My test service'" author "Dave Null "

# Stanzas

#

# Stanzas define when and how a process is started and stopped

# See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn

# When to start the service

start on runlevel [2345]

# When to stop the service

stop on runlevel [016]

# Automatically restart process in case of crash

respawn

# Specify working directory

chdir /home/dave/myfiles

# Specify the process/command (add arguments if needed) to run

exec bash backup.sh arg1 arg2

其中start on runlevel控制着服务的自启动。要使配置生效,需要让upstart重新加载它的配置文件:

initctl reload-configuration

然后可以使用如下命令启动服务:

start yourjobname

systemd启动

开发systemd的主要目的就是减少系统引导时间和计算开销。采用systemd启动方式的话,它将取代传统的init程序,启动过程将交由systemd来处理。systemd的一个核心功能是同时支持sysvinit的后开机启动脚本。因此,可以使用sysvinit的后开机启动脚本来实现自定义程序的开机自启动。

systemd使用target文件来处理引导和服务管理过程。systemd执行的第一个目标是default.target,它实际上是指向graphical.target的软连接,然后在这个阶段会启用multi-user.target,multi-user.target会将控制权交给另一层basic.target。basic.target用于启动普通服务特别是图形管理服务,之后会将控制权交给sysinit.target,来启动重要的系统服务,例如系统挂载、内存交换空间和设备、内核补充选项等等。

通常systemd的配置文件主要放在/usr/lib/systemd/system目录里,配置文件通常为以下形式:1

2

3

4

5

6

7

8

9

10[Unit]

Description=this is hello service

[Service]

Type=simple

ExecStart=

ExecStop=

[Install]

WantedBy=multi-user.target

使用以下命令使服务开机自启动:

systemctl enable my_custom_app

各种*rc文件

除了以上方式之外,还有一些其他的配置文件可以使程序随着用户登录等行为自启动,例如/etc/profile可以使所有用户登录时启动程序,/etc/bashrc则是所有用户执行bash时运行该脚本。此外,还有/.profile、/.bash_login、/.bash_profile、/.bashrc、~/.Xinitrc等等。

小讯
上一篇 2025-04-08 19:57
下一篇 2025-03-11 22:35

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/46934.html