Linux開機自動啟動python指令碼程式,或 Jetson nano或Jetson Xavier NX開機自動啟動python指令碼程式

語言: CN / TW / HK

本文已參與「新人創作禮」活動,一起開啟掘金創作之路。

想要做到某個程式在開機的時候自動啟動,就要知道系統中哪些程式或者配置檔案,是每次開機都是要先執行一遍的,我們只需要想辦法把程式執行的命令放到指定的位置,就可以伴隨著開機後自動執行!

1 通過系統介面設定開機自動執行程式

1.1 windows系統設定開機自動執行命令

在windows系統中,可以通過任務計劃程式,把需要執行的程式命令,或者要執行的應用程式新增到一個任務中,這樣在每次開機或指定的時間就可以執行該程式,具體請參考這篇部落格

1.2 Linux開機設定開機自動執行命令

當然linux上也有視覺化的介面,設定每次開機自動啟動的應用或程式!

1、這是我的Mint系統(Ubuntu系統改造後的系統)中設定介面中的開機自啟動程式 在這裡插入圖片描述

2、然後選擇自定義命令

在這裡插入圖片描述

3、然後把你要執行的命令或者程式填寫進入即可(當然你也可以寫成一個bash指令碼)然後在bash指令碼中定義要執行的程式! 在這裡插入圖片描述

注意:

Jetson NanoJetson Xavier NX中並沒有該設定介面,其他的嵌入式裝置我也沒有嘗試,如果你裝置也沒有類似的設定介面,那就繼續往下看吧!

2 Linux中設定開機自啟動python指令碼程式

先說明,我要開機執行如下的程式,讓每次程式開機後就自動播放一段影片,我指令碼程式的路徑為:/home/zhihui/test_boot_up.py

python3 test_boot_up.py

在這裡插入圖片描述

注意:

  • 下面的所有linux開機自啟動python程式的方法,我最終都是在Jetson nano上測試的!!!

2.1 方法一:在/etc/rc.local中新增要執行的指令碼命令

1、用vim開啟/etc/rc.local檔案

sudo vim /etc /rc.local

2、在/etc/rc.local檔案中新增你要執行的命令

```python

!/bin/sh -e

rc.local

This script is executed at the end of each multiuser runlevel.

Make sure that the script will "exit 0" on success or any other

value on error.

In order to enable or disable this script just change the execution

bits.

By default this script does nothing.

/usr/bin/python3 /home/zhihui/test_boot_up.py & exit 0 ```

注意:

  • 自啟動的指令碼命令要放到exit 0之前
  • &:表示讓命令在後臺執行,不在命令列顯示,當然你不加&也是可以的
  • 我的/etc目錄下並沒有rc.local檔案,而且我嘗試這種方法在Jetson nano上是沒有成功的,大家可以自行嘗試

2.2 方法二:在/etc/profile中新增要執行的指令碼

2.2.1 在/etc/profile中新增要執行的指令碼

1、先建立一個指令碼檔案:/home/zhihui/start.sh

vim ~/start.sh

當然,這個檔案你可以放在任意的位置,記住start.sh檔案的路徑即可!

2、在 start.sh檔案中新增要開機自啟動的指令碼命令

```python

!/bin/bash

sudo python3 /home/zhihui/test_boot_up.py ```

3、給start.sh檔案加上可執行許可權

sudo chmod +x /home/zhihui/test_boot_up.py

4、把/home/zhihui/start.sh新增到/etc/profile檔案的末尾

sudo vim /etc/profile

然後把/home/zhihui/start.sh新增到配置檔案的末尾

5、重新啟動,看看程式有沒有自動啟動

sudo reboot

注意:

  • 我用這種方法可以成功自啟動程式,但是有點小問題,每次開啟後影片是在播放,但是介面不能夠操作
  • 還有,這種方法你需要管理員許可權

2.2.2 知識拓展

1、登入shell之後啟會被執行的配置檔案

登入shell時,linux會按一定規則讀取啟動幾個配置檔案:

```python /ect/profile

$HOME/.bash_profile

$HOME/.bashrc

$HOME/.bash_login

$HOME/.profile ```

其中 /ect/profile檔案是系統預設主啟動檔案,系統上每個使用者登入時都會執行

  • 1)命令列登入和ssh登入,shell會按照以下順序,執行第一個被找到的檔案,餘下的會被忽略:

```python $HOME/.bash_profile

$HOME/.bash_login

$HOME/.profile ```

上面沒有 $HOME/.bashrc ,因為該檔案一般通過其他檔案執行。

  • 2)圖形介面登入,只加載/ect/profile$HOME/.profile,其他的會被忽略。

對於no-login shell,即圖形介面開啟的shell,只會讀入$HOME/.bashrc檔案,不會檢查/etc/.profile等其他登入shell檔案。

2、開機自動啟動的服務程式

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 多使用者狀態 。

在這裡插入圖片描述

2.3 方法三:新增到桌面自動啟動程式中

1、建立檔案:~/.config/autostart/MyScript.desktop

注意:

如果沒有autosart目錄就先建立一個目錄

2、然後把要開機執行的命令新增到~/.config/autostart/MyScript.desktopExec中即可,如下:

```python [Desktop Entry] Encoding=UTF-8 Name=MyScript Comment=MyScript Icon=gnome-info Exec=python3 /home/zhihui/test_boot_up.py Terminal=false Type=Application Categories=

X-GNOME-Autostart-enabled=true X-GNOME-Autostart-Delay=0 ```

3、然後重啟一下,看看是否會自動啟動程式

sudo reboot

  • 推薦使用這種方法
  • 我使用這種方法可以成功執行程式!

2.3 方法四:使用crontab命令

是用crontab -e命令,開啟配置檔案,然後在配置檔案中加入要執行的命令:

@reboot python3 /home/zhihui/test_boot_up.py

也可以加上睡眠時間:

@reboot (sleep 30; python3 /home/zhihui/test_boot_up.py)

參考:https://www.jianshu.com/p/06b140e598e3 參考:https://blog.csdn.net/qq_29113041/article/details/78675396 參考:https://www.xz577.com/j/24992.html 參考:https://stackoverflow.com/questions/24518522/run-python-script-at-startup-in-ubuntu 參考:https://raspberrypi.stackexchange.com/questions/4123/running-a-python-script-at-startup

歡迎大家關注筆者,你的關注是我持續更博的最大動力


原創文章,轉載告知,盜版必究

微信:suihailiang0816
QQ:931762054
wx公眾號:仰望星空的小隨