Debian

在啟動時以 root 身份執行 bash 腳本

  • May 17, 2017

我有一個腳本可以計算 IP 地址(使用網關地址)而不是更改,

當我使用 sudo 手動啟動腳本時,腳本工作

sudo ./changework.sh

我希望這個腳本在啟動時執行

一世

sudo cp changework.sh /etc/init.d/changework
sudo chmod+x /etc/init.d/changework
sudo update-rc.d changework defaults 

但它不起作用,

我也用它測試過

sudo crontab -e 

然後添加

@reboot sleep 10 && /home/ubunu/changework.sh

它也不起作用

changework.sh

#!/bin/bash

#set interface
interface="enp0s5"

#read current IP address on interface
current_ip=`ifconfig $interface 2>/dev/null|awk '/inet addr:/ {print $3}'|sed 's/Bcast://'`
IP=`cut -f1,2,3 -d"." <<< $current_ip`
lIP=`cut -f4 -d"." <<< $current_ip`
lIP=`expr $lIP - 34`
IP=$IP"."$lIP
#return default gateway
gateway=$(/sbin/ip route | awk '/default/ { print $3 }')
#check if IP is taken using ping
count=`ping -c 1 $IP | grep 'received' | awk -F',' '{ print $2 }' | awk '{ print $1 }'`

if [ $count -eq 0 ]; then
       #change IP if available
       ifconfig $interface down
       ifconfig $interface $IP up
       ifconfig $interface
       #change gateway
       ip route add default via $gateway
else
       #IP change not possible
       echo "IP not available"
fi

請任何人提供解決方案或解決方法,並感謝您的任何幫助或建議

如果您使用的是 jessie(或後者),我建議您遵循這個不錯的指南,因為它使用 systemd 方法。

  • 如果您已經是 root,請不要使用 sudo。在系統啟動時執行腳本的唯一方法是 root。
  • 為什麼要將文件複製到 /etc/init.d 中?將其複制一次並保留在那裡。然後從那裡執行它。- 或者按照 Sandro B 的建議使用從 systemd 呼叫的腳本。
  • 不要只使用命令。總是給出完整的路徑。尤其是在啟動和 cronjobs 中。例如:ifconfig 是 /sbin/ifconfig
  • 您想使用“/bin/ip”而不是“ifconfig”。後者已過時。
  • 為什麼不使用 /etc/network/interfaces 和 /etc/network/interfaces.d ?(人機界面)。特別是“預先準備”以確保腳本始終在界面啟動之前執行。
  • 如果我理解你的意圖,你想在你的網路中使用 dhcp 伺服器。如果您提供給伺服器的第一個 IP 已經在使用中,會發生什麼?

引用自:https://serverfault.com/questions/849248