systemdとAnsibleを使用してGNU / Linuxホストセットでスワップを完全に無効にする最善の方法は何ですか?
何らかの理由で、私のVMの中には、次のように/etc/fstab
起動時に自動的に選択されるスワップファイルが設定されていますsystemd-fstab-generator
。
$ cat /run/systemd/generator/swapfile.swap
# Automatically generated by systemd-fstab-generator
[Unit]
SourcePath=/etc/fstab
Documentation=man:fstab(5) man:systemd-fstab-generator(8)
[Swap]
What=/swapfile
いくつかの理由で、これらのシステムで実行される一部のサービスはスワップファイルを使用すると非常に遅くなるため、そのサービスが使用されないようにする必要があります。私のsystemdバージョンにはまだ含まれていません。MemorySwapMax
。
私は混乱を避けたいと思っており、/etc/fstab
これらのスワップファイルを適切な場所に保つことには気をつけません。
状況に応じて、私はansible-3.0.0、ansible-base-2.10.6を使用しています。システムはCentOS 7、systemd 219です。
答え1
デフォルトでは、systemdにそのアクションを実行させ、他のsystemdデバイスを使用してすぐに再開できます。
確認すると、デバイスが実行するすべてのタスクがsystemd show swapfile.swap
そのファイルで実行されていることがわかります。手動で実行するswapon
と、swapoff
次回の起動時にスワップが再表示されます。
swapoff
ディスクからメモリに何も移動できないため、その直後に実行するにはswapon
1秒もかかりません。しかし、確かに走らなければなりません。swapoff
後ろに swapon
、systemdにそのように指示することができますAfter=local-fs.target
。
プレイブックまたはロールディレクトリにユニットファイルをj2テンプレートとして配置しますnoswap.service.j2
。templates/
{{ ansible_managed|comment }}
[Unit]
Description=Disable swapfile
Documentation=man:swapon(8) man:systemd.swap(5)
After=local-fs.target
[Service]
Type=oneshot
User=root
ExecStart=/usr/sbin/swapoff -a
[Install]
WantedBy=default.target
スクリプトやキャラクターに次の内容を含めます。
---
- name: Your playbook
tasks:
- name: Write noswap systemd service config file
template:
src: noswap.service.j2
dest: /etc/systemd/system/noswap.service
owner: root
group: root
mode: 0644
notify: Enable noswap service
handlers:
- name: Enable noswap service
systemd:
name: noswap
state: started
enabled: true
daemon_reload: true
起動後は起動中にサービスが開始されるため、state: started
ansibleが実行されるたびにサービスが再エクスポートされるのを防ぐ必要があります。