netctl を使用して eth0 と wlan0 の間にブリッジを設定しました。起動時に eth0 と wlan0 を設定するように指示し、起動後に手動でブリッジを開始するように指示すると、正常に動作します。ただし、ブリッジを自動的に開始するように指示すると、何らかの理由で wlan アダプタがアクセス ポイントに接続されません。そのため、システム全体の起動が終了してから 1 分ほど経ってから「netctl start bridge」を実行する必要があります。これをどのように実行すればよいか、何かアイデアはありますか?
PS. これはヘッドレス システム (xorg なし) なので、xorg の起動時に実行しても機能しません。
答え1
systemd タイマーを使用して、起動の 1 分後にスクリプトを実行できます。
まず、サービス ファイル (/etc/systemd/system/myscript.service) を作成します。
[Unit]
Description=MyScript
[Service]
Type=simple
ExecStart=/usr/local/bin/myscript
次にタイマーを作成します (/etc/systemd/system/myscript.timer)。
[Unit]
Description=Runs myscript one minute after boot
[Timer]
# Time to wait after booting before activation
OnBootSec=1min
Unit=myscript.service
[Install]
WantedBy=multi-user.target
有効にして実行します:
# systemctl enable myscript.timer
# systemctl start myscript.timer
答え2
Arch は systemd を使用して起動プロセス (デーモンなど) を管理します。
必要なコマンドを実行するだけのスクリプトを書いたり、1分間スリープしてから実行したりすることができます。次に、ブートプロセスにスクリプトを追加して、
スリープを追加した場合:
#!/bin/sh
sleep 60 # one min
netctl start bridge
問題なく動作するはずです。Systemd はスクリプトを実行するときに別のプロセスを生成するので、システムがハングすることはありません。
答え3
ブロッキングのないシンプルなものが必要な場合は、/etc/rc.local に次のコードを追加します。
( sleep 60 && /path/to/command_or_script [opts] ) &