注意事项:如果脚本没有执行,首先应该考虑执行权限问题,查看脚本和相应的文件是否有执行权限,如果没有需要赋予执行权限。

方法1:

1.编写一个shell脚本文件,例如python_auto.sh,文件内容:

2.编写start.py文件,里面执行你需要服务器开启执行的操作

3.在 /etc/profile  这个文件中,添加shell脚本文件路径,例如:

在服务器开机时会自动执行 /etc/profile中的代码

注: linux随机启动的服务程序都在/etc/init.d这个文件夹里,里面的文件全部都是脚本文件,另外在/etc这个文件夹里还有诸如名为rc1.d, rc2.d一直到rc6.d的文件夹,这些都是linux不同的runlevel,我们一般进入的X windows多用户的运行级别是第5级,也就是rc5.d,在这个文件夹下的脚本文件就是运行第5级时要随机启动的服务程序。需要注意的是,在每个rc (1-6).d文件夹下的文件其实都是/etc/init.d文件夹下的文件的一个软连接,也就是说,在 /etc/init.d文件夹下是全部的服务程序,而每个rc(1-6).d只链接它自己启动需要的相应的服务程序! 还 需要注意的一点是,在rc5.d里,每个链接的名字都是以S或者K开头的,S开头的表示是系统启动是要随机启动的,K开头的是不随机启动的。这 样,你就可以知道,如果我要哪个服务随机启动,就把它名字第一个字母K改成S就可以了,当然,把S改成K后,这个服务就不能随机启动了。Ubuntu系统运行级别: 0  系统停机状态 1  单用户或系统维护状态 2~5 多用户状态 6  重新启动 

登录时自动运行程序: 用户登录时,bash首先自动执行系统管理员建立的全局登录script :/ect/profile。然后bash在用户起始目录下按顺序查找三个特殊文件中的一个:/.bash_profile、/.bash_login、 /.profile,但只执行最先找到的一个。 因此,只需根据实际需要在上述文件中加入命令就可以实现用户登录时自动运行某些程序。 退出登录时自动运行程序: 退出登录时,bash自动执行个人的退出登录脚本/.bash_logout。

实例:

/opt/abc.sh 

#!/bin/sh

nohup /usr/bin/python2 /opt/agent.py >/dev/null 2>&1 &

/etc/profile 最后面添加

bash /opt/abc.sh

方法2:

在/etc/rc.local文件中添加一行:

/usr/bin/python2.7 /usr/local/qlya/timing_insert.py & 

&符号为让脚本后台运行,不在命令行显示结果

方法3:

编写一个service,并让service开机自启动(CentOS 7)

/usr/lib/systemd/system/  目录下存储了很多以service为后缀的服务文件,systemctl就是根据这些服务文件来管理服务。

编写自己的服务文件test.service,然后放入该目录,EXP:

[Unit]
Description=test
Documentation=empty
After=network.target remote-fs.target nss-lookup.target mysqld.service
 
[Service]
Type=oneshot
PIDFile=/run/test.pid
ExecStartPre=
ExecStart=/apps/bin/python /apps/test.py
ExecReload=
ExecStop=
PrivateTmp=true
 
[Install]
WantedBy=multi-user.target

具体各项参数百度下即可,service文件编写完成后即可使用systemctl来管理。

systemctl enable test.service   # 该命令使服务开机自启动

那么开机后,systemctl工具会自动运行该服务文件中ExecStart参数填写的命令

方法4:针对Ubuntu18.04

最近在使用Ubutnu18.04,我突然发现没有rc.local文件了,原来是因为在新版本全部统一使用systemctl来管理服务了,开机自启动服务也不例外。

vim /lib/systemd/system/rc-local.service
 
# 添加install参数
[Install]  
WantedBy=multi-user.target  
Alias=rc-local.service
 
touch /etc/rc.local # 创建rc.local文件,默认没有创建
 
将需要开机自启动的命令写在rc.local中就可以了
 
systemctl status rc.local和systemctl status rc-local
你会发现用的是同一个service文件,即rc-local.service
Logo

更多推荐