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.