Systemd
我该如何在 ArchLinux 启动时使用类似rc.local
命令来运行命令Sysv
?
答案1
取决于命令。对于最常见的情况,你不需要一个命令。
如果你想调整 sysctl(中的文件
/proc/sys
),可以在/etc/sysctl.d/*.conf
(通常99-sysctl.conf
或99-local.conf
;手册页):kernel.sysrq = 1 kernel.pid_max = 4194304
如果它是下的模块参数
/sys/modules
,则应在模块首次加载时设置,在/etc/modprobe.d/*.conf
(一般而言modprobe.conf
;参见手册页):options kafs rootcell=stacken.kth.se
如果要在 中写入设备参数
/sys
,或者要运行程序来更改设备的设置,请编写一个udev当设备插入电源并将其放入/etc/udev/rules.d/*.rules
。手册页是,当您尝试匹配正确的设备时,udev(7)
您会发现它很有用。udevadm info
ACTION=="add", SUBSYSTEM=="net", KERNEL=="eth*", \ RUN+="/usr/bin/ethtool -s %k wol d" # This rule checks if a device has an attribute in its /sys subdir: ACTION=="add", \ SUBSYSTEM=="scsi_host", \ TEST=="link_power_management_policy", \ ATTR{link_power_management_policy}="medium_power"
如果要在其他任何地方写入文件,或者创建文件或目录,请使用
/etc/tmpfiles.d
(手册页)。如果你想加载一个模块,将其名称放在一个文件中
/etc/modules-load.d/*.conf
(手册页)。最后,如果要运行常规命令或启动守护进程,请编写一个
.service
单元文件(许多手册页之一)。 把它放进去/etc/systemd/system/*.service
,并使用中的许多示例/lib/systemd/system
。它将通过进行管理systemctl
。需要注意以下几点:
Type=
参数必须正确设置(simple
vsforking
vsoneshot
),并且ExecStart=
参数需要简单的命令行并且不接受类似 shell 的语法(no>
、no&&
、no$(...)
等等,只有简单的$ENVVAR
和%x
。)可以在特定设备出现后使用(例如)来订购服务。
After=name.device
After=sys-subsystem-net-devices-%i.device
两个都#archlinux和#systemd在 IRC 频道上自由节点网络。