[Ubuntu][Systemd][自分用メモ] Systemdファイルの中でリダイレクトしたら、パラメータが有効になってなかった。

AIX、UNIX、Linux
how to run a command automaticly on starting up with systemd / Newbie Corner / Arch Linux Forums

自宅サーバのboot時に必要なパラメータを呼んで有効にしようと思った時に引っかかったのでメモ。

間違いのもと

以下の様な感じのスクリプトを呼ぶようにしていました。

#!/bin/sh -e

# Workaround unhandled rdmsr/wrmsr
echo 1 >/sys/module/kvm/parameters/ignore_msrs

# vnc start
su kometch -c "vncserver :0"

# Disable NCQ on all disks. (for raptors it increases the speed 30-40MiB/s)
echo 1 > /sys/block/sda/device/queue_depth
echo 1 > /sys/block/sdb/device/queue_depth

hdparm -a 1024 /dev/sda
hdparm -a 1024 /dev/sdb
hdparm -a 1024 /dev/md0

# ether offload off
ethtool -K eth0 rx off tx off tso off
ethtool -K eth1 rx off tx off tso off
ethtool -K eth2 rx off tx off tso off
ethtool -K eth3 rx off tx off tso off
ethtool -G eth0 rx 512
ethtool -G eth1 rx 512

# To disable transparent huge pages:
echo never > /sys/kernel/mm/transparent_hugepage/enabled

echo auto > '/sys/bus/usb/devices/1-4/power/control'

# OpenVswtich config
ovs-vsctl set br ovsbr0 other_config:forward-bpdu=true
ovs-vsctl set br ovsbr0 fail_mode=standalone
ovs-vsctl set br ovsbr0 stp_enable=true

実際にはsystemd的には最後にrc.localが呼び出されますが、せっかくSystemdで出来ないか試してみました。

で、実際に最初に作成したsystemctlファイルは以下の様な感じです。

[Unit]
Description=Want to add startup parameters
After=syslog.target network.target auditd.service
After=openvswitch-switch.service
After=local-fs.target

[Service]
Type=oneshot

# Workaround unhandled rdmsr/wrmsr
ExecStart=echo 1 >/sys/module/kvm/parameters/ignore_msrs

# vnc start
ExecStart=/bin/su kometch -c "vncserver :0"

ExecStart=echo 1 > /sys/block/sda/device/queue_depth
ExecStart=echo 1 > /sys/block/sdb/device/queue_depth

ExecStart=/sbin/hdparm -a 1024 /dev/sda
ExecStart=/sbin/hdparm -a 1024 /dev/sdb
ExecStart=/sbin/hdparm -a 1024 /dev/md0

# ether offload off
ExecStart=/sbin/ethtool -K enp4s0f0 rx off tx off tso off
ExecStart=/sbin/ethtool -K enp4s0f1 rx off tx off tso off
ExecStart=/sbin/ethtool -K enp5s0f0 rx off tx off tso off
ExecStart=/sbin/ethtool -K enp5s0f1 rx off tx off tso off
ExecStart=/sbin/ethtool -G enp5s0f0 rx 512
ExecStart=/sbin/ethtool -G enp5s0f1 rx 512

# To disable transparent huge pages:
ExecStart=echo never > /sys/kernel/mm/transparent_hugepage/enabled

ExecStart=echo auto > '/sys/bus/usb/devices/1-4/power/control'

# OpenVswtich config
ExecStart=/usr/bin/ovs-vsctl set br ovsbr0 other_config:forward-bpdu=true
ExecStart=/usr/bin/ovs-vsctl set br ovsbr0 fail_mode=standalone
ExecStart=/usr/bin/ovs-vsctl set port bond0 fake_bridge=true

[Install]
WantedBy=multi-user.target

で、この中でEchoを使用をしている部分についてパラメータが有効になっていませんでした。jounalctl上ではsuccessになっているのですが、どうやらリダイレクトが使えないらしいです。

修正してみた

ということで以下のことを思い出して修正。

[Unit]
Description=Want to add startup parameters
After=syslog.target network.target auditd.service
After=openvswitch-switch.service
After=local-fs.target

[Service]
Type=oneshot

# Workaround unhandled rdmsr/wrmsr
ExecStart=/bin/bash -c 'echo 1 >/sys/module/kvm/parameters/ignore_msrs'

# vnc start
ExecStart=/bin/su kometch -c "vncserver :0"

ExecStart=/bin/bash -c 'echo 1 > /sys/block/sda/device/queue_depth'
ExecStart=/bin/bash -c 'echo 1 > /sys/block/sdb/device/queue_depth'

ExecStart=/sbin/hdparm -a 1024 /dev/sda
ExecStart=/sbin/hdparm -a 1024 /dev/sdb
ExecStart=/sbin/hdparm -a 1024 /dev/md0

# ether offload off
ExecStart=/sbin/ethtool -K enp4s0f0 rx off tx off tso off
ExecStart=/sbin/ethtool -K enp4s0f1 rx off tx off tso off
ExecStart=/sbin/ethtool -K enp5s0f0 rx off tx off tso off
ExecStart=/sbin/ethtool -K enp5s0f1 rx off tx off tso off
ExecStart=/sbin/ethtool -G enp5s0f0 rx 512
ExecStart=/sbin/ethtool -G enp5s0f1 rx 512

# To disable transparent huge pages:
ExecStart=/bin/bash -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'

ExecStart=/bin/bash -c 'echo auto > /sys/bus/usb/devices/1-4/power/control'

# OpenVswtich config
ExecStart=/usr/bin/ovs-vsctl set br ovsbr0 other_config:forward-bpdu=true
ExecStart=/usr/bin/ovs-vsctl set br ovsbr0 fail_mode=standalone
ExecStart=/usr/bin/ovs-vsctl set port bond0 fake_bridge=true

[Install]
WantedBy=multi-user.target

bash -cで実行してやると大丈夫でした。
ちなみにteeで実行した時はなぜか有効になりませんでした。こちらが有効にならないのはなぜなのかは不明です。

以下のようにjounalにlogが出ないんですよね・・・

$ sudo journalctl -u boot_init.service
-- Logs begin at Wed 2015-05-20 19:05:47 JST, end at Wed 2015-05-20 19:08:47 JST. --
May 20 19:06:01 ubuntu-virt.kometch.local systemd[1]: Starting Want to add startup parameters...
May 20 19:06:01 ubuntu-virt.kometch.local su[2637]: Successful su for kometch by root
May 20 19:06:01 ubuntu-virt.kometch.local su[2637]: + ??? root:kometch
May 20 19:06:01 ubuntu-virt.kometch.local su[2637]: pam_unix(su:session): session opened for user kometch by May 20 19:06:05 ubuntu-virt.kometch.local hdparm[3354]: /dev/sda:
May 20 19:06:05 ubuntu-virt.kometch.local hdparm[3354]: setting fs readahead to 1024
May 20 19:06:05 ubuntu-virt.kometch.local hdparm[3354]: readahead     = 1024 (on)
May 20 19:06:05 ubuntu-virt.kometch.local hdparm[3359]: /dev/sdb:
May 20 19:06:05 ubuntu-virt.kometch.local hdparm[3359]: setting fs readahead to 1024
May 20 19:06:05 ubuntu-virt.kometch.local hdparm[3359]: readahead     = 1024 (on)
May 20 19:06:05 ubuntu-virt.kometch.local hdparm[3362]: /dev/md0:
May 20 19:06:05 ubuntu-virt.kometch.local hdparm[3362]: setting fs readahead to 1024
May 20 19:06:05 ubuntu-virt.kometch.local hdparm[3362]: readahead     = 1024 (on)
May 20 19:06:05 ubuntu-virt.kometch.local ovs-vsctl[3384]: ovs|00001|vsctl|INFO|Called as /usr/bin/ovs-vsctl May 20 19:06:05 ubuntu-virt.kometch.local ovs-vsctl[3386]: ovs|00001|vsctl|INFO|Called as /usr/bin/ovs-vsctl May 20 19:06:05 ubuntu-virt.kometch.local ovs-vsctl[3388]: ovs|00001|vsctl|INFO|Called as /usr/bin/ovs-vsctl May 20 19:06:06 ubuntu-virt.kometch.local systemd[1]: Started Want to add startup parameters.

この記事を書いた人

kometchtech

うつ病を患いながら、IT業界の末席にいるおっさんエンジニア。科学計算をしたことがないのに、HPC分野にお邪魔している。興味のある分野で学習したことをblogにまとめつつ、うつ病の経過症状のメモも置いておく日々。じつはRouterboard User Group JPの中の人でもある。 Amazon欲しいものリスト / Arm板を恵んでくれる人募集中

kometchtechをフォローする
タイトルとURLをコピーしました