起動時に動作するサービスがいくつかありますが、どうやって設定したのか忘れてしまいました。サービスの動作を変更したい場合、どのようにすればいいのでしょうか?例えば、あるサービスを起動時に起動しないようにしたいとか、別の方法で起動させたいとか
具体的には、起動時に正常に動作する openvpn サービスを持っているのですが、いくつかのチュートリアルでは、vpn がダウンした場合にファイル共有サービスもダウンするように、ファイル共有プログラムのサービスを vpn 自体に結びつけるべきだと言われています。しかし、おそらく私は、VPN の自動実行が物事を複雑にしていると思うので、VPN を無効にするか、起動方法を変更するべきだと思います。しかし、どのように確認するには?
19 user1502186 2014-12-15
私の知る限りでは、まだ systemd に移行していない raspian を使用している Raspberry を持っていると仮定しています。この場合の答えは以下のようになります
EDIT: systemd (Jessie以降)の場合は、下の方を参照してください
まず、現在どのシステムが稼働しているかは、コマンドを使って判断できます
sudo service --status-all
なんとなくこのようなリストが出てきます
[ + ] triggerhappy
[ + ] udev
[ ? ] udev-mtab
[ ? ] umountfs
[ ? ] umountnfs.sh
[ ? ] umountroot
[ - ] urandom
[ + ] vsftpd
[ + ] weewx
[ - ] x11-common
は稼働しているサービス、-は稼働していないサービス、 ? はコマンドとしてのステータスを許可していないサービスを示します
質問に戻ると、Linux のランレベルを理解する必要があります。ランレベル (0-6 + S) は、どのサービスを実行してもよい/しなければならないかを識別します。ブートシーケンスは、初期のランレベル(/etc/inittab で指定されている、私の Raspberry
# The default runlevel.
id:2:initdefault:
この行は2と識別し、あなたのディストロ標準の最終ランレベル(2から5まで)に進みます。コマンドを使って現在のランレベルを識別します
# runlevel
N 2
(私の場合はヘッドレスサーバー)。他のランレベルは(またしても é/etc/inittab* から)
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.
また、シングルユーザー(1)は、Sと識別されることが多い
通常のブートでは、このように 2 から始まり、5 まで進みます。この進行で開始されたサービスを見つけるには、コマンドを実行します
# grep -nrI Default-Start /etc/init.d
umountroot:7:# Default-Start:
checkroot.sh:8:# Default-Start: S
kbd:6:# Default-Start: S
isc-dhcp-server:11:# Default-Start: 2 3 4 5
mountkernfs.sh:7:# Default-Start: S
hostname.sh:7:# Default-Start: S
mountnfs.sh:7:# Default-Start: S
halt:6:# Default-Start:
dphys-swapfile:20:# Default-Start: 2 3 4 5
bootlogs:7:# Default-Start: 1 2 3 4 5
rc.local:6:# Default-Start: 2 3 4 5
hostapd:9:# Default-Start: 2 3 4 5
keyboard-setup:8:# Default-Start: S
lightdm:7:# Default-Start: 2 3 4 5
procps:11:# Default-Start: S
mysql:9:# Default-Start: 2 3 4 5
single:6:# Default-Start: 1
vsftpd:7:# Default-Start: 2 3 4 5
samba:7:# Default-Start: 2 3 4 5
mountall.sh:6:# Default-Start: S
weewx:20:# Default-Start: 2 3 4 5
umountnfs.sh:7:# Default-Start:
triggerhappy:6:# Default-Start: 2 3 4 5
ifplugd:24:# Default-Start: 2 3 4 5
alsa-utils:9:# Default-Start: S
bootmisc.sh:7:# Default-Start: S
sendsigs:6:# Default-Start:
console-setup:7:# Default-Start: S
nfs-common:7:# Default-Start: 2 3 4 5 S
checkroot-bootclean.sh:6:# Default-Start: S
rsyslog:7:# Default-Start: 2 3 4 5
x11-common:7:# Default-Start: S
mountdevsubfs.sh:7:# Default-Start: S
cron:10:# Default-Start: 2 3 4 5
mountnfs-bootclean.sh:6:# Default-Start: S
mountall-bootclean.sh:6:# Default-Start: S
screen-cleanup:11:# Default-Start: S
udev:6:# Default-Start: S
ssh:7:# Default-Start: 2 3 4 5
haveged:8:# Default-Start: 2 3 4 5
hwclock.sh:26:# Default-Start: S
plymouth:9:# Default-Start: 2 3 4 5
motd:7:# Default-Start: 1 2 3 4 5
killprocs:6:# Default-Start: 1
networking:6:# Default-Start: S
fake-hwclock:9:# Default-Start: S
udev-mtab:6:# Default-Start: S
apache2:6:# Default-Start: 2 3 4 5
reboot:6:# Default-Start:
umountfs:6:# Default-Start:
plymouth-log:9:# Default-Start: S
openvpn:11:# Default-Start: 2 3 4 5
kmod:8:# Default-Start: S
ntp:7:# Default-Start: 2 3 4 5
rpcbind:9:# Default-Start: S 2 3 4 5
urandom:6:# Default-Start: S
rmnologin:6:# Default-Start: 2 3 4 5
checkfs.sh:7:# Default-Start: S
sudo:8:# Default-Start: 2 3 4 5
mtab.sh:6:# Default-Start: S
dbus:6:# Default-Start: 2 3 4 5
rsync:8:# Default-Start: 2 3 4 5
これは、さまざまなサービスを識別するファイルが保存されている/etc/init.d/のすべてのファイルのDefault-Startで始まる行を表示します。問題の行は、各サービスが開始されるランレベルを識別します。サービスがランレベル N で起動されている場合、システムが N+1 に進んだときには、再度起動する必要はありませんが、起動していないことがわかった場合には起動されます
これにより、サービスが開始されるさまざまな段階を正確に把握することができます。しかし、同じランレベル内で、Required-StartとShould-Startの行は、問題のサービスのハードとソフトの依存関係を定義しています。Required-Start サービスがなければ、問題のサービスは失敗しますが、代わりに Should-Start サービスがなければ、一般的な失敗はありません。同じことが、Required-Stop と Should-Stop で停止する際にも起こります
SYSTEMD:
すべてのサービスを一覧表示するコマンドは
systemctl list-unit-files
これは多くの情報を吐き出してくれます。有効になっているサービス、つまり起動時に起動されるサービスをすべて選択するには、上のコマンドを以下のように grep します
systemctl list-unit-files | grep enabled
私は systemctl list-units よりもこのコマンドの方が好きです: 違いは、このコマンドは OS がメモリ内にあるサービスのみを表示し、一方 systemctl list-unit-files は、マスクされているサービス (つまり、手動でも起動されることがないと思われるサービス) や、スタティックと呼ばれる起動されないサービスを含めて、インストールされている全てのサービスを表示します。言い換えれば、私が提案したコマンドは、アクティブなサービスだけをリストアップするコマンドよりも包括的です
注意: systemd は以前の init システムとは大きく異なります。ランレベルは互換性の理由からまだ存在しています
systemctl list-unit-files --type=target
によって現在のターゲットを見ることができますが
$ systemctl get-default
graphical.target
これについての詳細は、DigitalOceanの優れた入門ページをご覧ください
27 MariusMatutiae 2014-12-16
Raspberry Pi上での簡単な起動サービス管理には、rcconf
というツールをお勧めします。これを使うと、/etc/init.d/
で簡単にサービスのオン/オフを切り替えることができます。また、それらが有効になっているかどうか、起動時に実行されるかどうかを確認することもできます
ツールをインストールするには
sudo apt-get install rcconf
そして、テキストUIで非常にシンプルに使えます
sudo rcconf
8 jjurm 2015-04-09
sudo nano /etc/rc.local
ここにバッチファイルや起動時に実行するコマンドを挿入します。私も起動時にOpenvpnを自動実行しています。)
3 Hexark 2014-12-15