Einen Befehl beim Start ausführen

2140
Jordan Doyle

Wie würde ich beim Start in ArchLinux einen Befehl ausführen Systemdwie rc.localin Sysv?

1

1 Antwort auf die Frage

7
grawity

Kommt auf den Befehl an. Für die häufigsten Fälle benötigen Sie keinen Befehl.

  • Wenn Sie eine sysctl (eine Datei in anpassen mögen /proc/sys), die können in konfiguriert werden /etc/sysctl.d/*.conf( in der Regel 99-sysctl.confoder 99-local.conf, Handbuch Seite ):

    kernel.sysrq = 1 kernel.pid_max = 4194304 
  • Wenn es sich um einen Modulparameter unter handelt /sys/modules, sollte es beim ersten Laden des Moduls in /etc/modprobe.d/*.conf(allgemein modprobe.conf; siehe Handbuchseite) festgelegt werden:

    options kafs rootcell=stacken.kth.se 
  • Wenn Sie in einen Geräteparameter schreiben möchten /sysoder ein Programm ausführen möchten, um die Geräteeinstellungen zu ändern, schreiben Sie eine udev- Regel, die dies tun würde, wenn das Gerät angeschlossen ist, und fügen Sie es ein /etc/udev/rules.d/*.rules. Die Handbuchseite ist udev(7), und Sie werden udevadm infonützlich sein, wenn Sie versuchen, das richtige Gerät zu finden.

    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="medium_power" 
  • Wenn Sie in eine andere Datei schreiben oder eine Datei oder ein Verzeichnis erstellen möchten, verwenden Sie /etc/tmpfiles.d( Manpage ).

  • Wenn Sie ein Modul laden möchten, geben Sie seinen Namen in eine Datei ein /etc/modules-load.d/*.conf( Manpage ).

  • Wenn Sie schließlich einen allgemeinen Befehl ausführen oder einen Dämon starten möchten, schreiben Sie eine .serviceUnit-Datei ( eine von vielen Manualpages ). Legen Sie es ein /etc/systemd/system/*.serviceund verwenden Sie die vielen Beispiele in /lib/systemd/system. Es wird durchkommen systemctl.

    Ein paar Dinge zu beachten: Der Type=Parameter muss richtig gesetzt sein ( simplevs forkingvs oneshot), und der ExecStart=Parameter erfordert eine einfache Befehlszeile und akzeptiert keine Shell-ähnliche Syntax (nein >, nein &&, nein $(...)und so weiter, nur einfach $ENVVARund %x.)

    Es ist möglich, Dienste zu bestellen, nachdem ein bestimmtes Gerät angezeigt wurde (z . B. ).After=name.deviceAfter=sys-subsystem-net-devices-%i.device

Sowohl #archlinux als auch #systemd haben ihre IRC-Kanäle im Freenode- Netzwerk.

Es ist ein Daemon, den ich ausführen möchte. Ich habe versucht, eine Servicedatei zu erstellen, aber sie schien zu hängen oder etwas und würde den Befehl niemals ausführen, aber es funktionierte, wenn ich sie manuell ausführte. Danke für die ausführliche Antwort. Jordan Doyle vor 10 Jahren 0
@JordanDoyle: Möglicherweise ist [dieser Blogbeitrag] (http://0pointer.de/blog/projects/systemd-for-admins-3.html) hilfreich. Beachten Sie auch den Parameter ** `Type =` ** in `systemd.service (5)`. Versuchen Sie auch, den IRC-Kanal oder die Foren von Arch zu fragen, da systemd-Units genau so wie rc.d-Skripts im Paket enthalten sein sollten. grawity vor 10 Jahren 0