linux 开机自启动脚本 (Ubuntu: 以某一个用户执行, OpenSUSE, CentOS)
Ubuntu/Debian
rc.local 中的命令会在系统启动完成之后运行(SysVinit)。
1 . 编辑:
/etc/rc.local
添加想要被执行的命令即可(默认是以root用户执行)。
注: 有些很特殊的情况 /etc/rc.local
不会被执行,可以 编辑 /etc/init.d/rc.local
see link: http://www.linuxidc.com/Linux/2016-12/138665.htm
2 . 以期望的用户执行命令:
su -c 'ls -l "myfile.txt"' guowei &
解释: 其中需要被执行的命令是 ls -l "myfile.txt"
, 期望的用户的 guowei
, &
表示在后台运行。
3 . 开机以 screen 运行程序脚本,并添加环境变量(no-login):
#!/bin/bash
# 环境变量要在 su 之前设置好,然后 sudo -E 保持环境变量
# 如果直接是root用户执行该脚本,则只需要 su -p 或者 su -m 保持环境变量即可
export GUOWEI_DIR=/home/guowei
export PATH=/opt/bin:$PATH
source /home/guowei/.bashrc
if [ -e /opt/my_app ]; then
# sudo -E su -p -l guowei << BASH # 如果要以 guowei 用户执行那些程序的话,去掉注释即可。 su - 表示切换的环境变量,sudo 需要添加 -E 选项。
su -p guowei << BASH # 以用户 guowei 执行以下命令,注意不要加 sudo, 否则就需要以 sudo -E 执行。
cd /home/guowei
screen -d -m /opt/my_app
# BASH
fi
# 或者将 export 写在 -c 内部, 加上 -c 和 单引号:
su guowei -c 'export A=/opt/bla; blabla~; /opt/my_app' // 注意:双引号跟单引号有区别
然后 ssh 登陆后, 切换到对应用户, screen -ls
可以看到在后台运行的程序。
OpenSUSE:
OpenSUSE启动程序的设置比较特殊(没有 /ect/rc.local
文件),主要有这三个文件(SysVinit):
1./etc/init.d/after.local
此文件默认不存在,需要用户手动创建。它是在系统已完成运行级的启动后执行的脚本。与其它系统的
/etc/rc.local
相似。
2./etc/init.d/boot.local
此文件在系统启动后,进入运行级前就执行的用户脚本。注意这一文件执行时网络等设备都尚未就绪(没有网络连接),使用时应小心。
3./etc/init.d/before.local
该文件在也是在rc启动脚本之前执行,但是会在boot.local之后执行。
因此,对于大多数启动程序来说,将其加到 /etc/init.d/after.local
中较为合适。
如果系统是使用 Systemd, 则对应的文件为: /etc/init.d/after-local
To enable /etc/init.d/after-local:
systemctl enable after-local.service
To check status of/etc/init.d/after-local
:
systemctl status after-local.service
总的来说,对于使用SysVinit
系统来说,如果是一般的用户程序,只需要新建文件:
vi /etc/init.d/after.local
添加自定义的启动命令即可:
#!/bin/sh
/usr/local/bin/redis-server /etc/redis/6379.conf
ref link:
- https://unix.stackexchange.com/questions/43230/how-to-run-my-script-after-suse-finished-booting-up
- https://www.cnblogs.com/toSeek/articles/3011455.html
CentOS:
1、在 /etc/init.d/
目录下新建一个文件:autostart.sh
#!/bin/sh
#chkconfig: 2345 80 80
#description: auto start my app
sh xxx & # 期望被执行的命令
2、cd 到 /etc/init.d目录下,输入命令:
chkconfig --add autostart.sh
chkconfig autostart.sh on
更多推荐
所有评论(0)