私はArchlinuxを使用していて、最近systemdを試し始めました。
しかし、systemdが/etc/rc.localスクリプトをロードしないことがわかりました。
Wikiページで述べたように、私はsystemctl enable rc-local.service
、しかしこれは助けにはなりませんでした。
/etc/rc.localファイルの内容は次のとおりです。
echo -n 120 > /sys/devices/platform/i8042/serio1/speed
echo -n 250 > /sys/devices/platform/i8042/serio1/sensitivity
iptables --table nat -A POSTROUTING -s 192.168.0.0/16 -j MASQUERADE
助言がありますか?
Archはrc.local
の実行に必要なサービスユニットファイルを含んでいない可能性があります。
次の内容のファイル/etc/systemd/system/rc-local.service
を作成するだけです(Fedora systemdシステムからそのままコピーします)。
#このファイルはsystemdの一部です。 # #systemdはフリーソフトウェアです。 GNU一般公衆利用許諾契約書 #によって公開されている一般公衆利用許諾契約書)の条件に基づいて、再頒布および/または変更することができます #;バージョン2または、 #(オプションで)以降のバージョン。 [Unit] Description =/etc/rc.local互換性 ConditionPathExists =/etc/rc.local [Service] Type = forking ExecStart =/etc/rc.local start TimeoutSec = 0 StandardOutput = tty RemainAfterExit = yes SysVStartPriority = 99
次に、systemctl enable rc-local.service
をrootとして実行して有効にします。 systemctl start rc-local.service
を実行して、今すぐテスト/実行することもできます。
Systemd 188-2を使用すると、systemdは[Install]
セクションがないため、rc.localサービスを有効にできないことを報告します。以前のバージョンではそうだったかもしれませんが、Arch開発者が最近発表したsystemdがデフォルトになるので、システムを修正しています。
これを修正するには、/etc/systemd/system/rc-local.service
にマルチユーザーターゲットのセクションを追加するだけです。
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
/etc/rc.local
スクリプトを作成し、chmod +x /etc/rc.local
で実行可能にします
Pkgfile(私のシステム上)は言う:
$ pkgfile --search rc-local.service
community/initscripts-systemd
そのパッケージはあなたが望まないかもしれない他のものをインストールしますが、それを無効にすることができます。参照: https://wiki.archlinux.org/index.php/Systemd#The_initscripts-systemd_package
Rc.localを実行可能にすることを忘れないでください-そうでなければ互換性レイヤーはそれを実行しません!上記の例では、rc.localファイルを実行可能にするためにchmod a + xを実行します。次のように:
$ chmod a+X /etc/systemd/system/rc-local.service
別の問題として考えられるのは、rc.localスクリプトの場所です。 systemdに互換性をまだ追加していない場合(組み込みである必要があり、すでに存在しているという以前の言及によると思われる)ファイルの場所を再確認する必要があるかもしれません...私のOSではrc-localを使用しています/etc/rc.d/rc.localにあるので、以下を実行しました。
$ Sudo chmod a+x /etc/rc.d/rc.local
$ Sudo systemctl restart rc-local.service
$ Sudo systemctl status rc-local.service
rc-local.service - /etc/rc.d/rc.local Compatibility
Loaded: loaded (/lib/systemd/system/rc-local.service; static)
Active: active (exited) since Fri, 13 Apr 2012 14:42:39 -0600; 3s ago
Process: 2285 ExecStart=/etc/rc.d/rc.local start (code=exited, status=0/SUCCESS)
CGroup: name=systemd:/system/rc-local.service
2つの一般的な問題:
/etc/rc.d/rc.local
を実行可能にすることを忘れないでください。使用できます
# chmod a+rx /etc/rc.d/rc.local
実行可能にする。
#!/bin/sh
の最初の行に/etc/rc.d/rc.local
行を入れることを忘れないでください。以下に、状況を示します。
# head -1 /etc/rc.d/rc.local
#!/bin/sh
# file /etc/rc.d/rc.local
/etc/rc.d/rc.local: POSIX Shell script, ASCII text executable
同様の出力が得られない場合は、/etc/rc.d/rc.local
を編集して、#!/bin/sh
だけを含む行を最上部に追加します。
/etc/rc.local
を実行可能ファイルとして持っている場合、systemd-rc-local-generator
/rc-local.service
によって起動プロセスに取り込まれます。
少なくとも/etc/rc.local
が使用するデフォルトのパスですが、これはディストリビューションによって設定されます。それは主に下位互換性のためであり、異なるディストリビューションが異なるパスを使用していたためです。例えば。 Fedoraでは、パスは/etc/rc.d/rc.local
です。次のようにパスを確認できます。
$ systemctl cat rc-local.service
# /usr/lib/systemd/system/rc-local.service
# ...
# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.d/rc.local is executable.
[Unit]
Description=/etc/rc.d/rc.local Compatibility
ConditionFileIsExecutable=/etc/rc.d/rc.local
After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.d/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no
これはあまり知られていないようです。以前のバージョンのファイルを示す投稿がいくつかありますが、そのようなコメントはありません。