!!!Systemdについて systemd はLinuxにおけるinitデーモンの代替であり、CentOS7から導入された。 !!!使い方 http://blog.yuryu.jp/2014/07/systemd-quick-guide.html ,操作,SysV Init,Systemd ,起動,/etc/init.d/sshd start,systemctl start sshd ,終了,/etc/init.d/sshd stop,systemctl stop sshd ,状態確認, /etc/init.d/sshd status, systemctl status sshd ,強制終了,PID探してkill -9,systemctl kill -s 9 sshd ,再起動,/etc/init.d/sshd restart,systemctl restart sshd ,設定反映,/etc/init.d/sshd reload,systemctl reload sshd ,状態取得,/etc/init.d/sshd status,systemctl status sshd ,自動起動を有効,chkconfig sshd on,systemctl enable sshd ,自動起動を無効,chkconfig sshd off,systemctl disable sshd ,自動起動の状態確認,chkconfig --list sshd,systemctl is-enabled sshd(status でも表示される) ,自動起動の状態確認2, chkconfig --list,systemctl list-unit-files ,サービス一覧の表示,ls /etc/init.d,systemctl --type service !!ページャ systemctl の出力結果がページャに渡されるを防ぐには systemctl --no-pager のように、--no-pager オプションを使う !!ランレベルについて Systemd ではランレベルに似たものとしてターゲットを使っています。 基本的に各サービスのランレベルを変える必要はないはず・・・。 ,SysV ランレベル ,systemd ターゲット ,説明 ,0 ,"runlevel0.target, poweroff.target" ,システムを停止。 ,"1, s, single" ,"runlevel1.target, rescue.target" ,シングルユーザーモード。 ,"2, 4" ,"runlevel2.target, runlevel4.target, multi-user.target" ,ユーザー定義・サイト指定ランレベル。デフォルトでは、3 と同一。 ,3 ,"runlevel3.target, multi-user.target" ,マルチユーザー、非グラフィカル。一般的にマルチコンソールやネットワークを介してログインするのに使われます。 ,5 ,"runlevel5.target, graphical.target" ,マルチユーザー、グラフィカル。通常、ランレベル 3 の全てのサービスにグラフィカルログインを付加。 ,6 ,"runlevel6.target, reboot.target" ,再起動 ,emergency ,emergency.target ,緊急シェル !各サービスのランレベルを変更する 各ターゲット内にサービスへのシンボリックリングを作成したり消したりする・・・でいいのかな? ただ、各ターゲット間で依存関係があったりするので注意。 !OSの起動時のターゲット(ランレベル)を変更する systemctl set-default multi-user.target !!依存関係の一覧 http://d.hatena.ne.jp/enakai00/20130914/1379146157 systemctl list-dependencies unitの一覧 systemctl list-unit-files 稼働しているserviceの一覧 systemctl list-units !設定ファイルのディレクトリ http://d.hatena.ne.jp/enakai00/20130914/1379146157 ,ディレクトリ,説明 ,/usr/lib/systemd/system,システムデフォルトの設定。RPMパッケージが提供するデフォルト設定を配置する。 ,/etc/systemd/system,ユーザ設定。ここに同名のファイルを配置するとこちらのファイルの内容が優先される。 !!Unitの種類 ,Unitのタイプ,説明 ,mount,指定のファイルシステムをマウントする ,automount,オートマウント処理を実施する(automountdの代替的な機能) ,service,指定のバイナリを実行する(主にはデーモンの起動に使用する) ,socket,systemdがSocketをListenして、接続があるとプロセスに受け渡す(xinetdの代替的な機能) ,path,指定のファイルが作成されると、指定されたサービスを起動する ,device,udevから通知されたデバイスを表す ,target,複数のUnitをまとめるために使用する !!!任意のシェルスクリプトを serviceとして実行する https://wiki.archlinux.org/index.php/Systemd_FAQ_%28%E6%97%A5%E6%9C%AC%E8%AA%9E%29#.E3.83.96.E3.83.BC.E3.83.88.E3.83.97.E3.83.AD.E3.82.BB.E3.82.B9.E3.81.AE.E9.96.93.E3.81.AB.E3.82.B9.E3.82.AF.E3.83.AA.E3.83.97.E3.83.88.E3.82.92.E8.B5.B7.E5.8B.95.E3.81.99.E3.82.8B.E3.81.AB.E3.81.AF.E3.81.A9.E3.81.86.E3.81.99.E3.82.8C.E3.81.B0.E3.81.84.E3.81.84.E3.81.A7.E3.81.99.E3.81.8B.EF.BC.9F http://qiita.com/masami256/items/ef0f23125cf8255e4857 !!サンプル1 シェルを実行するだけのサンプル。 デーモンとしてではく、一回処理するだけならサンプル2のように RemainAfterExit=yes を設定したほうがいいかもしれない。 !任意のシェルスクリプトを準備する vi /etc/systemd/system/myscript.service [Unit] Description=My script [Service] ExecStart=/usr/bin/my-script [Install] WantedBy=multi-user.target !実行権限を付加 他のserivceファイルと同じように chmod 755 myscript.service !サービスを有効にする systemctl enable myscript.service !!サンプル2 [Unit] Description=Load dump capture kernel After=local-fs.target [Service] Type=oneshot ExecStart=/opt/bin/run-kexec.sh RemainAfterExit=yes [Install] WantedBy=multi-user.target サンプル1との大きな違いは、 Type=oneshot RemainAfterExit=yes の2行。 デーモンではなく、一度だけのシェル実行等の場合は Type=oneshot とする。また、 RemainAfterExit=yes を設定することで systemd はプロセスが終了した後もサービスがアクティブだとみなします。 !!サンプル3(dice) http://blogs.yahoo.co.jp/oguri0821/63640997.html https://ospry.wordpress.com/2013/12/09/fedora20-ddns-with-ieserver-dice/ vi /usr/lib/systemd/system/dice.service [Unit] Description=The ddojp After=network.target remote-fs.target nss-lookup.target [Service] Type=notify EnvironmentFile=/usr/local/src/DiCE/diced ExecStart=/usr/local/src/DiCE/diced -d -l ExecReload=/usr/local/src/DiCE/diced $OPTIONS ExecStop=/usr/local/src/DiCE/diced $OPTIONS RemainAfterExit=yes PrivateTmp=true [Install] WantedBy=runlevel3.target !!!任意のプログラムをデーモンとして実行する !!サンプル1 http://hakaikosen.hateblo.jp/entry/2014/07/15/215546 [Unit] Description=hoge server daemon After=syslog.target network.target [Service] ExecStart=hoge オプション(実行したいプログラムを実行) ExecReload=/bin/kill -HUP $MAINPID ExecStop=/bin/kill $MAINPID [Install] WantedBy=multi-user.target プログラムの終了は強制的にkillしているので注意 {{category2 OS,Linux}}