我编写了一个 shell 脚本,将我当前的 IP 发送到 Google Drive 文件夹,以帮助自动登录 Raspberry PI。我的笔记本电脑上的另一个脚本检索 IP 并登录。当我从命令行运行该脚本时,它运行正常,但在分配 IP 后,我无法让它在启动时运行。
我尝试过 crontab,但脚本在分配 IP 之前运行。我不想设置计时器或使用 while 循环来等待 IP,这听起来效率不高。我试图在启动过程中但在 DHCP 运行之后执行我的脚本。我尝试在 allinterfaceup() 函数中添加 upstart 的路径,但这也没有用。任何帮助都将不胜感激。
树莓派 3,Ubuntu Mate 16.04 LTS
脚本:
#!/bin/sh
#if ([ $reason = "BOUND" ] || [ $reason = "RENEW" ] )
#then
echo `hostname -I | cut -d' ' -f1 ` > ~/ipAddr/ip.txt
rclone copy ~/ipAddr/ip.txt remote:pi
#fi
答案1
钩子
有多种方法可以实现这一点。
如果你想执行你的脚本“DHCP 运行后“ 然后钩子是适合您的产品!
dhclient
/etc/dhcp/dhclient-exit-hooks.d/
退出后将执行目录中的所有内容。*
将脚本链接到目录而不是将其放在那里是一种很好的做法 - 但两者都可行。
ln -s /path/to/your/script /etc/dhcp/dhclient-exit-hooks.d/name_of_your_script
(*)但是,dhclient
它本身并不“退出”,而是每次执行某项操作时都会继续运行并执行(“来源”)此目录因为某种原因。
因此,为了禁止您的脚本被多次执行,我建议您用“if 语句”包装它,以便仅当 IP 地址被绑定或更新时才执行它,如下所示:
if ([ $reason = "BOUND" ] || [ $reason = "RENEW" ])
then
# your script commands here
fi
PSA:脚本不应该有类似的扩展script.sh
-感谢@Aloha 的提醒。