Как мне запустить команду при запуске в ArchLinux, используя Systemd
например 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
противforking
противoneshot
иExecStart=
параметр не требует простой командной строки и не принимает подобную раковину синтаксиса>
нет&&
нет$(...)
и т. д., только простые$ENVVAR
и%x
.)Можно заказать услуги после появления определенного устройства, используя
After=name.device
(например,After=sys-subsystem-net-devices-%i.device
).
И #archlinux, и #systemd имеют свои IRC-каналы в сети freenode .