在启动时运行命令

在启动时运行命令

Systemd我该如何在 ArchLinux 启动时使用类似rc.local命令来运行命令Sysv

答案1

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

  • 如果你想调整 sysctl(中的文件/proc/sys),可以在/etc/sysctl.d/*.conf(通常99-sysctl.conf99-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=参数必须正确设置(simplevs forkingvs oneshot),并且ExecStart=参数需要简单的命令行并且不接受类似 shell 的语法(no >、no &&、no$(...)等等,只有简单的$ENVVAR%x。)

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

两个都#archlinux#systemd在 IRC 频道上自由节点网络。

相关内容