Debian
在啟動時以 root 身份執行 bash 腳本
我有一個腳本可以計算 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 已經在使用中,會發生什麼?