networkmanagerを使用せずにwifiを自動的に有効にするスクリプトがありましたが、システムの起動中にrootとしてスクリプトを実行する方法がわかりません。ブート中にスクリプトを自動的に実行するにはどうすればよいですか?
networkmanagerを使用せずにwifiを自動的に有効にするスクリプトがありましたが、システムの起動中にrootとしてスクリプトを実行する方法がわかりません。ブート中にスクリプトを自動的に実行するにはどうすればよいですか?
回答:
実行するスクリプトを/etc/init.dディレクトリに配置し、スクリプトを実行可能にします。
chmod 755 myscript
それが完了したら、使用したいランレベルディレクトリにシンボリックリンクを作成します。たとえば、Ubuntuのデフォルトランレベルであるグラフィカルランレベル2でプログラムを実行したい場合は、/etc/rc2.d
ディレクトリに配置します。ディレクトリに配置することはできません。「S」で起動を示すことにより、実行するタイミングを示す必要があり、実行順序が重要です。番号を大きくすることにより、ディレクトリにある他のすべての後に配置します。
実行する最後のスクリプトがでありrc.local
、名前が付けられている場合はS99rc.local
、スクリプトをとして追加する必要がありますS99myscript
。
ln -s /etc/init.d/myscript /etc/rc3.d/S99myscript
下位互換性のある各/etc/rc*.d
ディレクトリには、/etc/init.d/
ディレクトリへのシンボリックリンクがあります。
/etc/rc2.d
代わりにを使用する必要があることに注意してくださいrc3.d
。rc2.d
グラフィカルな実行レベルだけではないようです。
cd /etc/rc`cat /etc/init/rc-sysinit.conf | grep "env DEFAULT_RUNLEVEL" | grep -oP "\d"`.d
これに行くことができます/etc/rc?.d
、あなたのデフォルトのランレベルに対応するディレクトリ。
rc.local
、名前が付けられている場合はS99rc.local
、スクリプトをS99myscript
。として追加する必要があります。」「最後に実行するスクリプトmyscript
が名前付きのS99myscript
場合、スクリプトをS99myscript
。として追加する必要があります。」???
にコマンドを含めます/etc/rc.local
。ユーザーのランレベルが変更されるたびに実行されます。
注:/etc/rc.localの「exit 0」を含む最後の行の前にコマンドを配置する必要があります。
/etc/rc.local
、その含まれています exit 0
/etc/rc.local
ubuntu 15.10では、「このスクリプトは各マルチユーザーランレベルの最後に実行されます」というコメントがあります。そのため、起動中にスクリプトを数回実行できますか?
crontab
オプションを使用して、再起動後にスクリプトを実行します。
あなたはcronで@reboot
コードを追加することでそれを行うことができます
rootユーザーでcrontabを開きます。
$ sudo crontab -e
下部に次のレコードを追加します。
@reboot yourScriptPath
それはあなたが望むことをします。
crontab -e
スーパーユーザー権限を必要としないcommandを使用するつもりですか?ルートとして実行する必要のあるスクリプトを実行できるかどうかは疑問です。
sudo crontab -e
起動時にスクリプトをルートとして実行する必要があります。
/var/run/crond.reboot
、そうでなければ、タスクを実行しません
これはUbuntu 17.04で私のために働いた:
disable_cdrom
便利な場所にツアースクリプトファイルを作成します。私の場合home/yterle/disable_cdrom
。私の場合:
#!/bin/sh
eject /dev/sr0 -i 1
実行可能にする chmod 775 disable_cdrom
/etc/systemd/system
て作成しservice
ます。例えばsudo gedit /etc/systemd/system/disable_cdrom.service
私disable_cdrom.service
はこのように見えます:
[Unit]
Description=Disable cdrom
[Service]
Type=oneshot
ExecStart=/bin/sh /home/yterle/disable_cdrom
[Install]
WantedBy=multi-user.target
ExecStart
スクリプトを実行する場所/bin/sh
次にsystemctl enable disable_cdrom.service
、systemdサービスを有効にするために実行します
systemctl enable disable_cdrom.service
スクリプトファイルに/etc/init.d/
実行可能権限を含めてから、異なる実行レベルを設定します
$ update-rc.d script-name default
スクリプトを起動時に起動します。
update-rc.d script-name enable
ですか?
スクリプトの追加に注意してくださいrc.local
- そのため、スプラッシュスクリーンで立ち往生しました。Alt+を押すとF1、スプラッシュスクリーンの背後で何が起こっているかがわかります(スクリプトrc.local
が実行されていました)。
私はそれから抜け出すことができませんでした。
何も動作しません。
USB Ubuntuイメージから起動し、検索してrc.local
、ファイルへのアクセス許可を付与し、削除する必要がありました。自分が何をしているのかわからない場合は、何もすべきではないと思います。
autostart
マニフェストやで*.service
同様のように、複数の場所にあるファイルinit.d
またはcrontab
。これを参照してください:unix.stackexchange.com/a/525845/43233