91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

樹莓派使用Shell編寫的極簡Service

發布時間:2021-11-19 18:42:02 來源:億速云 閱讀:130 作者:柒染 欄目:互聯網科技

本篇文章為大家展示了樹莓派使用Shell編寫的極簡Service,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

樹莓派(Raspberry Pi)運行的系統是基于Debian的,不僅可以運行Shell,還支持systemd和docker,可以編寫一個簡單的服務,讓其在啟動時運行,執行一些自動化的操作。這里在RaspPi Zero W上使用shell、systemd和Docker 18.06.1完成,詳細步驟介紹如下。

1、初始化系統

從樹莓派官網(https://www.raspberrypi.org/)下載鏡像,燒寫到SD卡(我用Etcher)。

  • 下載:https://www.raspberrypi.org/downloads/raspbian/

  • 福利:一個開源的超好用的SD卡/U盤燒寫工具

將SD卡插入樹莓派,加電啟動。

登錄使用:pi,raspberry。

如果想要通過ssh遠程操作,還需要安裝和啟用sshd服務開機啟動(下面介紹)。

當然,首先是要開通WiFi,能夠聯網。

2、WiFi 設置

Wifi AP設置,使用命令 “nano /etc/wpa_supplicant/wpa_supplicant.conf” 編輯配置文件,參照下面的方法添加WiFi熱點:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
	ssid="HiWiFi_xxxxxx"
	psk="mypassword"
}

建立服務需要使用靜態地址。修改文件dhcpcd(使用nano /etc/dhcpcd),編輯如下內容:

interface wlan0
noipv6rs
noipv6
static ip_address=192.168.199.190
static routers=192.168.199.1
domain_name_servers=192.168.199.1 8.8.8.8 9.9.9.9

將上面的IP地址和DNS改為自己的,其中8.8.8.8/9.9.9.9為公共的DNS服務地址,不需修改。

重啟dhcpcd服務(或者需要重啟樹莓派)。

聯網成功后,執行軟件版本更新操作。如下:

sudo apt update && sudo apt upgrade -y

3、編寫WatchDog和Service

創建一個自己的目錄,創建下面三個文件:

  • sshp.service,由systemd調用的服務配置文件。

  • sshp.daemon,執行服務控制(啟動、停止、狀態)的腳本文件。

  • sshp.worker,執行服務的任務腳本文件。

文件的內容如下。

3.1 sshp.service文件
[Unit]
Description=Secure Shell server proxy
After=network.target

[Service]
Type=forking
ExecStart=/home/pi/openthings/tutools/sshp.daemon start
ExecStop=/home/pi/openthings/tutools/sshp.daemon stop
TimeoutSec=0
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
Alias=sshp.service
3.2 sshp.daemon文件
#!/bin/sh

echo "SSHP tools."
#=======================
start() {
  now=`date '+%Y-%m-%d %H:%M:%S'`
  echo "$now  Start SSHP worker ..." >> /home/pi/openthings/tutools/sshp.log
  nohup /home/pi/openthings/tutools/sshp.worker &
}

#=======================
stop() {
  PID=`ps -aux | grep "sshp.worker" | grep -v grep | awk -F " " '{print $2}'`
  kill -9 $PID
  echo "Stop SSHP worker, PID="$PID >> /home/pi/openthings/tutools/sshp.log
}

#=======================
restart() {
  echo "Restart Service..."
  Stop
  Start
  echo "Restarted SSHT worker, PID="$PID
}

#=======================
status() {
  now=`date '+%Y-%m-%d %H:%M:%S'`
  echo "$now  Service status ssht."
  ps -aux | grep "sshp.worker" | grep -v grep
}

case "$1" in
  start) start ;;
  stop)  stop  ;;
  restart) restart ;;
  status) status ;;
  *)
    echo "Usage: (start|stop|restart|status)"
    exit 1
    ;;
esac

echo "Service SSHP tools done."
exit 0
3.3 sshp.worker文件
#!/bin/sh
while true; do
  sshpass -p mypassword ssh -o "ExitOnForwardFailure yes" -o "StrictHostKeyChecking no" -y -p 22000 -NgD *:5555 root@myserver
done
  • 這里僅使用ssh演示worker編寫方法,具體可以參考:SSH 命令行參數詳解【英】

  • 這里有個坑是,以服務啟動時的賬戶是root,與當前用戶pi的配置信息和缺省參數是不同的。

3.4 設為啟動時運行

使用下面的命令將剛才編寫的服務設為啟動時運行:

sudo systemctl enable sshp.service

查看一下,系統里的啟動運行服務:

# ls -l /etc/systemd/system/multi-user.target.wants/

total 0
lrwxrwxrwx 1 root root 40 Nov 29  2017 avahi-daemon.service -> /lib/systemd/system/avahi-daemon.service
lrwxrwxrwx 1 root root 41 Nov 29  2017 console-setup.service -> /lib/systemd/system/console-setup.service
lrwxrwxrwx 1 root root 38 Apr 12 05:45 containerd.service -> /lib/systemd/system/containerd.service
lrwxrwxrwx 1 root root 32 Nov 29  2017 cron.service -> /lib/systemd/system/cron.service
lrwxrwxrwx 1 root root 34 Nov 29  2017 dhcpcd.service -> /lib/systemd/system/dhcpcd.service
lrwxrwxrwx 1 root root 34 Dec 25  2017 docker.service -> /lib/systemd/system/docker.service
lrwxrwxrwx 1 root root 35 Nov 29  2017 hciuart.service -> /lib/systemd/system/hciuart.service
lrwxrwxrwx 1 root root 38 Nov 29  2017 networking.service -> /lib/systemd/system/networking.service
lrwxrwxrwx 1 root root 37 Nov 29  2017 nfs-client.target -> /lib/systemd/system/nfs-client.target
lrwxrwxrwx 1 root root 48 Nov 29  2017 raspberrypi-net-mods.service -> /lib/systemd/system/raspberrypi-net-mods.service
lrwxrwxrwx 1 root root 36 Nov 29  2017 remote-fs.target -> /lib/systemd/system/remote-fs.target
lrwxrwxrwx 1 root root 33 Nov 29  2017 rsync.service -> /lib/systemd/system/rsync.service
lrwxrwxrwx 1 root root 35 Nov 29  2017 rsyslog.service -> /lib/systemd/system/rsyslog.service
lrwxrwxrwx 1 root root 40 Apr 12 15:43 sshp.service -> /home/pi/openthings/tutools/sshp.service
lrwxrwxrwx 1 root root 31 Apr 12 12:40 ssh.service -> /lib/systemd/system/ssh.service
lrwxrwxrwx 1 root root 37 Nov 29  2017 sshswitch.service -> /lib/systemd/system/sshswitch.service
lrwxrwxrwx 1 root root 40 Nov 29  2017 triggerhappy.service -> /lib/systemd/system/triggerhappy.service
lrwxrwxrwx 1 root root 47 Dec 25  2017 unattended-upgrades.service -> /lib/systemd/system/unattended-upgrades.service
lrwxrwxrwx 1 root root 40 Mar 24  2018 wifi-country.service -> /lib/systemd/system/wifi-country.service
lrwxrwxrwx 1 root root 42 Apr 12 05:46 wpa_supplicant.service -> /lib/systemd/system/wpa_supplicant.service
3.5 測試服務啟停

使用下面的命令來控制服務。

# 查看服務運行狀態。
sudo systemctl status

# 啟動服務。
sudo systemctl start
# 然后,可以使用ps -aux查看ssh進程是否已經啟動。

# 停止服務。
sudo systemctl stop
# 然后,可以使用ps -aux查看ssh進程是否已經關閉。

這里設置了一個日志文件,為上面的目錄下sshp.log,可以查看輸出的信息。

可以修改上面的腳本,添加自己的日志信息輸出。

4、Docker安裝

也可以把任務放到Docker中運行。我這里用于創建一個Nginx服務,然后運行pac信息提供者,為iPhone等設備提供網絡配置參數時使用。

獲取docker自動安裝腳本并執行:

wget https://get.docker.io -O docker.sh
sudo chmod docker.sh
./docker.sh

目前,最新的Docker版本是18.09,但是運行時有Bug,暫時還沒有解決。

我們使用18.06.1版。安裝指定的Docker版本:

sudo apt install docker-ce=18.06.1-ce

將版本鎖定,以避免apt upgrade時自動升級到最新版本,命令如下:

sudo echo "docker-ce hold" | sudo dpkg --set-selections

測試一下Docker,看看安裝是否成功:

docker info

5 構建PAC服務

pac是什么?

pac是一種網絡配置的機制,客戶端通過獲取pac文件來自動獲取一系列配置參數,從而對網絡進行初始化設置。

編寫一個pac文件,如下:

function FindProxyForURL(url, host)
{ 
     return "SOCKS 192.168.199.190:5555";
}
pac服務構建

然后,將pac文件放入Web服務器,構建一個文件服務(也可以動態生成)。

這里使用Nginx的Docker鏡像來提供服務(注意Nginx有多種Docker鏡像,只有為樹莓派編譯的才可以在上面運行)。

運行:

docker run --name nginx -v /home/pi/openthings/web:/usr/share/nginx/www:ro -d -p 80:80 akkerman/rpi-nginx

這個安裝說明運行了后,所編寫的文件并沒有發布出來,進去看是因為Nginx缺省路徑為/var/www/html,而不是/usr/share/nginx/www。可以修改上面的命令為:

docker run --name nginx -v /home/pi/openthings/web:/var/www/html:ro -d -p 80:80 akkerman/rpi-nginx

或者執行Exec進入Docker進行修改,如下:

docker exec -it nginx /bin/sh

查看Nginx的service目錄:

cat /etc/nginx/sites-available/default

建立軟連接:

ln -s /usr/share/nginx/www /var/www/html

在目錄下,建立一個index.html文件,然后到瀏覽器輸入http://my-raspberrypi-ip,看是否能夠發布出來。

然后,將上面的pac文件放到該發布目錄下

6、測試可用性

現在,可以測試一下,上面建立的服務是否可用。

  • 使用瀏覽器

打開setting頁面,進入網絡設置,勾選sokcs5,填入上面的pac地址,勾選dns over https等選項。

輸入任何想要訪問的地址,等待奇跡出現。

  • 使用iPhone

進入setting,選擇網絡設置,里面有個“自動”選項,填入上面的pac地址。

7、小結

編寫一個Linux服務還是有一些難度的,上面提供了一個極簡的框架。

樹莓派體積雖小,運行一些控制性服務也是足夠了,關鍵是功耗足夠低,還沒有任何噪音。

一些定期執行的任務,如縮時攝影、溫濕度監測、自動澆水等等有趣的事都可以使用上面的機制來完成。

上述內容就是樹莓派使用Shell編寫的極簡Service,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

郎溪县| 聊城市| 伊金霍洛旗| 旬阳县| 雷山县| 根河市| 清镇市| 宝坻区| 阳泉市| 南汇区| 寿宁县| 双城市| 襄垣县| 长治县| 类乌齐县| 图们市| 乐陵市| 交城县| 英吉沙县| 资中县| 日照市| 边坝县| 大庆市| 兴仁县| 中西区| 沙河市| 永新县| 紫金县| 恭城| 大石桥市| 五华县| 横山县| 南投县| 海安县| 荣成市| 左云县| 霍林郭勒市| 泗水县| 宾川县| 同德县| 当雄县|