Linux實現指令碼開機自啟動
參考連結:https://blog.csdn.net/weixin_40343504/article/details/82457990
Ubuntu系統實現指令碼開機自啟動
0、序言
很多時候,我們使用Linux時,為了方便操作,需要用到一些自啟動的指令碼,對於不同的Linux系統來說,自啟動方式各有不同,我這裡記錄的是Ubuntu系統的;文章後面會補充參考連結的部落格部分內容,僅供參考學習使用。該方法也可以用在移植系統時,把開機啟動服務移植進去。
1、建立開機啟動服務
跳轉到/etc/systemd/system 資料夾,移植系統時也是到你的檔案系統的這個資料夾;
新建開機啟動服務 sudo vimmy_start.service
[Unit] #該檔案是自己建立的啟動服務檔案, #/bin/my_start.sh 是你要啟動的指令碼所在的路徑以及檔名,其他保持預設格式即可 Description=/bin/my_start.sh Compatibility ConditionPathExists=/bin/my_start.sh [Service] Type=forking ExecStart=/bin/my_start.sh TimeoutSec=0 StandardOutput=tty RemainAfterExit=yes SysVStartPriority=99 [Install]WantedBy=multi-user.target
給啟動服務新增許可權 sudo chmod 777my_start.service
2、建立要自啟動的指令碼
因為我在第一步的啟動服務裡宣告的啟動指令碼路徑以及名稱,所以建立的啟動指令碼名稱路徑要跟啟動服務裡宣告的一致;
跳轉到啟動服務裡宣告的 /bin 目錄,新增啟動指令碼 vimmy_start.sh
#!/bin/sh #該檔案為自定義開機啟動指令碼,可以用該指令碼執行一些你需要開機啟動的指令碼 PASSWORD="your_password" echo ${PASSWORD} | sudo -S /bin/myStart/set_net_core.sh #echo ${PASSWORD} | sudo -S 是實現指令碼自動把執行sudo命令時要輸入的密碼輸入進去
#我在這裡的指令碼實現的是:啟動 /bin/myStart 資料夾裡的 set_net_core.sh 指令碼
#這種方法的好處就是我只需要做一個啟動服務專門用來執行一個指令碼去執行其他指令碼,這樣後續還有新的需要開機自啟動指令碼就只需要把執行命令寫入到這裡即可
給啟動指令碼新增許可權 sudo chmod 777 my_start.sh
3、啟動指令碼自啟動服務
執行指令sudo systemctl enablemy_start.service 啟動指令碼自啟動服務;
如果你是做系統移植需要用到的,你需要移植完系統,燒錄後執行一次該指令。
以下內容轉自參考連結,補充其他系統的部分
一、CentOS系統和Redhat系統如下:
1.修改/etc/rc.d/rc.local為
#!/bin/bash # THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES # # It is highly advisable to create own systemd services or udev rules # to run scripts during boot instead of using this file. # # In contrast to previous versions due to parallel execution during boot # this script will NOT be run after all other services. # # Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure # that this script will be executed during boot. touch /var/lock/subsys/local source /root/Desktop/start.sh
“sourece /root/Desktop/start.sh”為要新增開機自啟動的指令碼,並且要給“/root/Desktop/start.sh”賦予執行許可權(chmod +x /root/Desktop/start.sh)
2.chmod 777 rc.local
3.重啟系統後就會開始執行預設定執行的指令碼。(此種自啟動方式不會在GUI介面顯示執行的具體程序)**
二、Suse 系統如下:
1.suse15
1)將需要開機啟動指令碼xxx.sh複製到 /etc/profile.d
chmod 777 xxx.sh
2)將系統改成root 自動登入
vi /etc/sysconfig/displaymanager
displaymanager-autologin=“root”
備註:
a.安裝suse15系統參考:http://morecoder.com/article/1120393.html
b.檢視OS IP指令為“ip -4 address”
c.遠端連線請用putty,ssh 工具無法使用。
2.Suse12
1.修改/etc/init.d/下面有個boot.local為:
#! /bin/sh # # Copyright (c) 2002 SuSE Linux AG Nuernberg, Germany. All rights reserved. # # Author: Werner Fink, 1996 # Burchard Steinbild, 1996 # # /etc/init.d/boot.local # # script with local commands to be executed from init on system startup # # Here you should add things, that should happen directly after booting # before we're going to the first run level. # source /root/Desktop/start.sh
“sourece /root/Desktop/start.sh”為要新增開機自啟動的指令碼,並且要給“/root/Desktop/start.sh”賦予執行許可權(chmod +x /root/Desktop/start.sh)
2.重啟系統後就會開始執行預設定執行的指令碼。(此種自啟動方式不會在GUI介面顯示執行的具體程序)
在Redhat Redflag centOS fc linux系統裡面指令碼的啟動先後順序:
第一步:通過/boot/vm進行啟動 vmlinuz
第二步:init /etc/inittab
第三步:啟動相應的指令碼,並且開啟終端
rc.sysinit
rc.d(裡面的指令碼)
rc.local
第四步:啟動login登入介面 login
第五步:在使用者登入的時候執行sh指令碼的順序:每次登入的時候都會完全執行的
/etc/profile.d/file
/etc/profile
/etc/bashrc
/root/.bashrc
/root/.bash_profile
Redhat中的執行模式2、3、5都把/etc/rc.d/rc.local做為初始化指令碼中的最後一個,所以使用者可以自己在這個檔案中新增一些需要在其他初始化工作之後,登入之前執行的命令