myuserのホームディレクトリに次のスクリプトがあります
#!/bin/bash
# startup.sh
export HOST_IP=$(/bin/ip -4 addr show enp2s0 | /bin/grep -Po 'inet \K[\d.]+')
echo "Using HOST_IP=$HOST_IP"
そして、私のユーザーのcrontab(ルートcrontabではない)に次のエントリがあります
@reboot /home/myuser/startup.sh > /home/myuser/restart.log 2>&1
自分でコマンドを実行すると、次の出力が表示されます。
> ./startup.sh
Using HOST_IP=192.168.1.15
しかし、マシンを再起動して調べてrestart.log
みると
> cat ./restart.log
Using HOST_IP=
ip
およびコマンドへのフルパスを使用しているのですgrep
が、crontab から実行したときに環境変数の値が取得されないのはなぜかわかりません。
答え1
cron@reboot
ジョブが実行されますアドレスが設定される前に。
より信頼性の高い方法は、たとえば を介して、ネットワーク コンフィギュレータの「post-up」フック メカニズムからスクリプトを実行することです/etc/NetworkManager/dispatcher.d
。