在启动时运行命令

Jor*_*yle 1 arch-linux systemd sysvinit

我将如何在 ArchLinux 中使用Systemdlike rc.localin在启动时运行命令Sysv

use*_*686 7

取决于命令。对于最常见的情况下,你并不需要一个命令。

  • 如果你想调整一个 sysctl(一个文件/proc/sys),那些可以在/etc/sysctl.d/*.conf(一般99-sysctl.conf99-local.conf;手册页)中配置:

    kernel.sysrq = 1
    kernel.pid_max = 4194304
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果它是 下的模块参数/sys/modules,则应在模块首次加载时设置,在/etc/modprobe.d/*.conf(通常modprobe.conf;参见手册页):

    options kafs rootcell=stacken.kth.se
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果要写入 中的设备参数/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"
    
    Run Code Online (Sandbox Code Playgroud)
  • 如果要在其他任何位置写入文件,或创建文件或目录,请使用/etc/tmpfiles.d(手册页)。

  • 如果要加载模块,请将其名称放在/etc/modules-load.d/*.conf(手册页)中的文件中。

  • 最后,如果您想运行一个通用命令或启动一个守护进程,请编写一个.service单元文件(许多手册页之一)。将其放入 中/etc/systemd/system/*.service,并使用 中的许多示例/lib/systemd/system。它将通过systemctl.

    需要注意的几点:Type=参数必须设置正确(simplevs forkingvs oneshot),并且ExecStart=参数需要一个简单的命令行并且不接受类似shell的语法(no >, no &&, no$(...)等等,只有简单的$ENVVAR%x. )

    可以在特定设备出现后订购服务,使用(例如)。After=name.deviceAfter=sys-subsystem-net-devices-%i.device

无论#archlinux#systemd有自己的IRC频道Freenode的网络。