🐧 Как Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ shell скрипт rc.local Π² systemd ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ систСмы Linux

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ скриптов ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ rc.local Π² systemd ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ систСмы Linux.

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ скрипт ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ /etc/rc.local ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ ΠΈ систСмным администратором Linux для Π²Ρ‹Π·ΠΎΠ²Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… скриптов ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ послС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ всСх слуТб.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ /etc/rc.local вызываСтся Π² ΠΊΠΎΠ½Ρ†Π΅, ΠΊΠΎΠ³Π΄Π° Linux init ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ запуска.

Однако ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° /etc/rc.local ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² systemd.

Π’ этом руководствС ΠΌΡ‹ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ скрипт ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ rc.local Π²ΠΎ врСмя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ systemd Π² Linux.

Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ скрипта ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ rc.local Π² systemd ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ систСмы Linux

Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с /etc/rc.local достигаСтся Ρ‡Π΅Ρ€Π΅Π· systemd с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ слуТбы ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ rc-local.service.

Π­Ρ‚ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ автоматичСски вызываСтся Π² multi-user.target систСмой systemd-rc-local-generator, Ссли /etc/rc.local являСтся исполняСмым.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ скрипта ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ rc.local Π²ΠΎ врСмя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ с использованиСм systemd

ЕстСствСнно, создайтС ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅/ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ /etc/rc.local с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ вашСго любимого тСкстового Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°.

Π― ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ vim:

$ sudo vim /etc/rc.local

## RHEL/CentOS/Fedora Linux ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» /etc/rc.d/rc.local ##

$ sudo vim /etc/rc.d/rc.local

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ скрипт.

 

Π’ΠΎΡ‚ ΠΌΠΎΠΉ Ρ„Π°ΠΉΠ»:
#!/bin/sh

# add your commands 

# call your scripts here

Β 

# let us set stuff for my wifi

/sbin/iw phy0 wowlan enable magic-packet disconnect

Β 

# last line must be exit 0 

exit 0

Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ ΠΈ Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΈ использовании vim.

Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ установили ΠΏΡ€Π°Π²Π° Π½Π° исполнСниС Ρ„Π°ΠΉΠ»Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ chmod:

$ sudo chmod -v +x /etc/rc.local

 

Настройка rc-local.service Π² Linux, ΠΊΠΎΠ³Π΄Π° systemd запускаСтся

ВсС, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, это ввСсти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ systemctl:

$ sudo systemctl enable rc-local.service

ΠŸΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ Linux:

 

$ sudo reboot

 

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ статус послС ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ:

 

$ sudo systemctl status rc-local.service

 

Π’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π½Π° экранС:

 

● rc-local.service - /etc/rc.local Compatibility

     Loaded: loaded (/etc/systemd/system/rc-local.service; enabled-runtime; ven>

    Drop-In: /usr/lib/systemd/system/rc-local.service.d

             └─debian.conf

     Active: active (exited) since Wed 2020-11-04 13:29:54 IST; 1h 59min ago

       Docs: man:systemd-rc-local-generator(8)

      Tasks: 0 (limit: 37939)

     Memory: 0B

     CGroup: /system.slice/rc-local.service



Nov 04 13:29:54 itsecforu systemd[1]: Starting /etc/rc.local Compatibility

Nov 04 13:29:54 itsecforu systemd[1]: Started /etc/rc.local Compatibility.

Как ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ сСрвиса

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅:

$ sudo systemctl cat rc-local.service

ΠœΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ systemd ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:
# /etc/systemd/system/rc-local.service

#  SPDX-License-Identifier: LGPL-2.1+

#

#  This file is part of systemd.

#

#  systemd is free software; you can redistribute it and/or modify it

#  under the terms of the GNU Lesser General Public License as published by

#  the Free Software Foundation; either version 2.1 of the License, or

#  (at your option) any later version.

Β 

# This unit gets pulled automatically into multi-user.target by

# systemd-rc-local-generator if /etc/rc.local is executable.

[Unit]

Description=/etc/rc.local Compatibility

Documentation=man:systemd-rc-local-generator(8)

ConditionFileIsExecutable=/etc/rc.local

After=network.target

Β 

[Service]

Type=forking

ExecStart=/etc/rc.local start

TimeoutSec=0

RemainAfterExit=yes

GuessMainPID=no

Β 

# /usr/lib/systemd/system/rc-local.service.d/debian.conf

[Unit]

# not specified by LSB, but has been behaving that way in Debian under SysV

# init and upstart

After=network-online.target

Β 

# Often contains status messages which users expect to see on the console

# during boot

[Service]

StandardOutput=journal+console

StandardError=journal+console

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. ЗапуститС sudo SYSTEMD_LOG_LEVEL=debug /usr/lib/systemd/system-generators/systemd-rc-local-generator для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с /etc/rc.local, ΠΊΠΎΠ³Π΄Π° скрипт Π½Π΅ загруТаСтся.

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎΠ± уровнях выполнСния Linux

Когда ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ использовался init, Ρƒ нас Π±Ρ‹Π»ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΡƒΡ€ΠΎΠ²Π½ΠΈ запуска:

    • S – Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ систСму Linux
    • 0 – Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Linux
    • 6 – ΠŸΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Linux
    • 1 – ΠžΠ΄Π½ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ Linux, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для восстановлСния систСмы Linux Π² Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅
    • 2–5 – ΠžΠ±Ρ‹Ρ‡Π½Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠ°Ρ систСма, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π°Ρ ΠΊΠ°ΠΊ CLI, Ρ‚Π°ΠΊ ΠΈ GUI, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π½ΡƒΡŽ ΡΠ΅Ρ‚Π΅Π²ΡƒΡŽ связь

Π—Π°ΡΡ‚ΡƒΡŽ дистрибутивы Linux ΠΈ систСма Unix измСняли эти значСния ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ выполнСния Π² соотвСтствии со своими потрСбностями.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, /etc/rc.local вызываСтся, ΠΊΠΎΠ³Π΄Π° систСма Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ Ρ‡Π΅Ρ€Π΅Π· ΡƒΡ€ΠΎΠ²Π½ΠΈ запуска ΠΎΡ‚ 2 Π΄ΠΎ 5.

Однако это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±Ρ‹Π»ΠΎ ΡƒΠ΄Π°Π»Π΅Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° большая Ρ‡Π°ΡΡ‚ΡŒ дистрибутивов Linux ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΠ»Π°ΡΡŒ Π½Π° systemd.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я написал это ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ руководство для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Linux ΠΈ систСмных администраторов.

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ свой собствСнный сСрвис Π»Π΅Π³ΠΊΠΎ с systemd Π½Π° Linux

ВмСсто скрипта ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Π² /etc/rc.d/ ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° /etc/rc.local ΠΌΡ‹ сдСлаСм это ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ.

Он Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Linux, Π½ΠΎ Π½Π΅ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… Unix. Π’ΠΎΠ³Π΄Π° просто сдСлайтС:

# /etc/systemd/system/my-service-name-goes-here.service

#

# Sample template to call your script or command when systemd boots into multi user mode

#

[Unit]

Before=network.target

[Service]

Type=oneshot

ExecStart=/path/to/command

ExecStart=/path/to/script arg1 arg2

RemainAfterExit=yes

[Install]

WantedBy=multi-user.target

НапримСр, Π²ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° Wireguard ΠΈΠ»ΠΈ openvpn iptables:

# /etc/systemd/system/wireguard-iptables.service

[Unit]

Before=network.target

[Service]

Type=oneshot

ExecStart=/usr/sbin/iptables -t nat -A POSTROUTING -s 10.8.1.0/24 ! -d 10.8.1.0/24 -j SNAT --to 123.x.x.x

ExecStart=/usr/sbin/iptables -I INPUT -p udp --dport 1194 -j ACCEPT

ExecStart=/usr/sbin/iptables -I FORWARD -s 10.8.1.0/24 -j ACCEPT

ExecStart=/usr/sbin/iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

ExecStop=/usr/sbin/iptables -t nat -D POSTROUTING -s 10.8.1.0/24 ! -d 10.8.1.0/24 -j SNAT --to 123.x.x.x

ExecStop=/usr/sbin/iptables -D INPUT -p udp --dport 1194 -j ACCEPT

ExecStop=/usr/sbin/iptables -D FORWARD -s 10.8.1.0/24 -j ACCEPT

ExecStop=/usr/sbin/iptables -D FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

RemainAfterExit=yes

[Install]

WantedBy=multi-user.target

 

А ΠΏΠΎΡ‚ΠΎΠΌ:

$ sudo systemctl enable wireguard-iptables.service

$ sudo systemctl start wireguard-iptables.service

$ sudo systemctl stop wireguard-iptables.service

 

НадСюсь, это руководство  ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ Π²Π°ΠΌ ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ смоТСтС Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ свои скрипты Ρ‡Π΅Ρ€Π΅Π· /etc/rc.local ΠΈ Π² простотС использованя systemd.

Π”Ρ€ΡƒΠ·ΡŒΡ ΠΏΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅ этому ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Ρƒ ΡΡ‚Π°Ρ‚ΡŒ доступнСС Π² ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сСтях.

НС ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈ ΠΌΠΈΠΌΠΎ ΠΆΠΌΠ°ΠΊΠ½ΠΈ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΡƒ Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½!

🐧 Как Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ shell скрипт rc.local Π² systemd ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ систСмы Linux

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π»Π΅Π³ΠΊΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ скриптов ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ rc.local Π² systemd ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ систСмы Linux.Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ скрипт ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ /etc/rc.local ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌΠΈ ΠΈ систСмным администратором Linux для Π²Ρ‹Π·ΠΎΠ²Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… скриптов ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄ послС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ всСх слуТб.ΠžΠ±Ρ‹Ρ‡Π½ΠΎ /etc/rc.local вызываСтся Π² ΠΊΠΎΠ½Ρ†Π΅, ΠΊΠΎΠ³Π΄Π° Linux init ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ запуска.Однако ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° /etc/rc.local ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² systemd.Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ скрипт ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ rc.local Π²ΠΎ врСмя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ systemd Π² Linux.

Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ скрипта ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ rc.local Π² systemd ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ систСмы Linux

Π‘ΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с /etc/rc.local достигаСтся Ρ‡Π΅Ρ€Π΅Π· systemd с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ слуТбы ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ rc-local.service.

Π­Ρ‚ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ автоматичСски вызываСтся Π² multi-user.target систСмой systemd-rc-local-generator, Ссли /etc/rc.local являСтся исполняСмым.

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ скрипта ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ rc.local Π²ΠΎ врСмя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ с использованиСм systemd

ЕстСствСнно, создайтС ΠΈΠ»ΠΈ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅/ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» с ΠΈΠΌΠ΅Π½Π΅ΠΌ /etc/rc.local с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ вашСго любимого тСкстового Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°.

Π― ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ vim:

$ sudo vim /etc/rc.local
## RHEL/CentOS/Fedora Linux ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» /etc/rc.d/rc.local ##
$ sudo vim /etc/rc.d/rc.local

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²ΠΈΡ‚Π΅ скрипт.Π’ΠΎΡ‚ ΠΌΠΎΠΉ Ρ„Π°ΠΉΠ»:#!/bin/sh# add your commands # call your scripts hereΒ # let us set stuff for my wifi/sbin/iw phy0 wowlan enable magic-packet disconnectΒ # last line must be exit 0 exit 0

Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ ΠΈ Π·Π°ΠΊΡ€ΠΎΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΈ использовании vim.

🐧 Как ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ» Π² Vi / Vim ΠΈ Π²Ρ‹ΠΉΡ‚ΠΈ

Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ установили ΠΏΡ€Π°Π²Π° Π½Π° исполнСниС Ρ„Π°ΠΉΠ»Π° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ chmod:

$ sudo chmod -v +x /etc/rc.local

Настройка rc-local.service Π² Linux, ΠΊΠΎΠ³Π΄Π° systemd запускаСтся

ВсС, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, это ввСсти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ systemctl:

$ sudo systemctl enable rc-local.service

ΠŸΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ Linux:$ sudo rebootΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ статус послС ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ:$ sudo systemctl status rc-local.serviceΠ’ΠΎΡ‚ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π½Π° экранС:● rc-local.service — /etc/rc.local Compatibility Loaded: loaded (/etc/systemd/system/rc-local.service; enabled-runtime; ven> Drop-In: /usr/lib/systemd/system/rc-local.service.d └─debian.conf Active: active (exited) since Wed 2020-11-04 13:29:54 IST; 1h 59min ago Docs: man:systemd-rc-local-generator(8) Tasks: 0 (limit: 37939) Memory: 0B CGroup: /system.slice/rc-local.serviceNov 04 13:29:54 itsecforu systemd[1]: Starting /etc/rc.local CompatibilityNov 04 13:29:54 itsecforu systemd[1]: Started /etc/rc.local Compatibility.

Как ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ сСрвиса

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» ΠΈ Π²Π²Π΅Π΄ΠΈΡ‚Π΅:

$ sudo systemctl cat rc-local.service

ΠœΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ systemd ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:# /etc/systemd/system/rc-local.service# SPDX-License-Identifier: LGPL-2.1+## This file is part of systemd.## systemd is free software; you can redistribute it and/or modify it# under the terms of the GNU Lesser General Public License as published by# the Free Software Foundation; either version 2.1 of the License, or# (at your option) any later version.Β # This unit gets pulled automatically into multi-user.target by# systemd-rc-local-generator if /etc/rc.local is executable.[Unit]Description=/etc/rc.local CompatibilityDocumentation=man:systemd-rc-local-generator(8)ConditionFileIsExecutable=/etc/rc.localAfter=network.targetΒ [Service]Type=forkingExecStart=/etc/rc.local startTimeoutSec=0RemainAfterExit=yesGuessMainPID=noΒ # /usr/lib/systemd/system/rc-local.service.d/debian.conf[Unit]# not specified by LSB, but has been behaving that way in Debian under SysV# init and upstartAfter=network-online.targetΒ # Often contains status messages which users expect to see on the console# during boot[Service]StandardOutput=journal+consoleStandardError=journal+console

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. ЗапуститС sudo SYSTEMD_LOG_LEVEL=debug /usr/lib/systemd/system-generators/systemd-rc-local-generator для ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с /etc/rc.local, ΠΊΠΎΠ³Π΄Π° скрипт Π½Π΅ загруТаСтся.

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎΠ± уровнях выполнСния Linux

Когда ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ использовался init, Ρƒ нас Π±Ρ‹Π»ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΡƒΡ€ΠΎΠ²Π½ΠΈ запуска:

  • S – Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ систСму Linux
  • 0 – Π²Ρ‹ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Linux
  • 6 – ΠŸΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Linux
  • 1 – ΠžΠ΄Π½ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ Linux, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для восстановлСния систСмы Linux Π² Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅
  • 2–5 – ΠžΠ±Ρ‹Ρ‡Π½Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠ°Ρ систСма, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰Π°Ρ ΠΊΠ°ΠΊ CLI, Ρ‚Π°ΠΊ ΠΈ GUI, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ»Π½ΡƒΡŽ ΡΠ΅Ρ‚Π΅Π²ΡƒΡŽ связь

Π—Π°ΡΡ‚ΡƒΡŽ дистрибутивы Linux ΠΈ систСма Unix измСняли эти значСния ΡƒΡ€ΠΎΠ²Π½Π΅ΠΉ выполнСния Π² соотвСтствии со своими потрСбностями.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, /etc/rc.local вызываСтся, ΠΊΠΎΠ³Π΄Π° систСма Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ Ρ‡Π΅Ρ€Π΅Π· ΡƒΡ€ΠΎΠ²Π½ΠΈ запуска ΠΎΡ‚ 2 Π΄ΠΎ 5.

Однако это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π±Ρ‹Π»ΠΎ ΡƒΠ΄Π°Π»Π΅Π½ΠΎ, ΠΊΠΎΠ³Π΄Π° большая Ρ‡Π°ΡΡ‚ΡŒ дистрибутивов Linux ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡ΠΈΠ»Π°ΡΡŒ Π½Π° systemd.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ я написал это ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ руководство для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Linux ΠΈ систСмных администраторов.

Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ свой собствСнный сСрвис Π»Π΅Π³ΠΊΠΎ с systemd Π½Π° Linux

ВмСсто скрипта ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Π² /etc/rc.d/ ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° /etc/rc.local ΠΌΡ‹ сдСлаСм это ΠΏΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ.

Он Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Linux, Π½ΠΎ Π½Π΅ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… Unix. Π’ΠΎΠ³Π΄Π° просто сдСлайтС:

# /etc/systemd/system/my-service-name-goes-here.service## Sample template to call your script or command when systemd boots into multi user mode#[Unit]Before=network.target[Service]Type=oneshotExecStart=/path/to/commandExecStart=/path/to/script arg1 arg2RemainAfterExit=yes[Install]WantedBy=multi-user.target

НапримСр, Π²ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° Wireguard ΠΈΠ»ΠΈ openvpn iptables:

# /etc/systemd/system/wireguard-iptables.service[Unit]Before=network.target[Service]Type=oneshotExecStart=/usr/sbin/iptables -t nat -A POSTROUTING -s 10.8.1.0/24 ! -d 10.8.1.0/24 -j SNAT —to 123.x.x.xExecStart=/usr/sbin/iptables -I INPUT -p udp —dport 1194 -j ACCEPTExecStart=/usr/sbin/iptables -I FORWARD -s 10.8.1.0/24 -j ACCEPTExecStart=/usr/sbin/iptables -I FORWARD -m state —state RELATED,ESTABLISHED -j ACCEPTExecStop=/usr/sbin/iptables -t nat -D POSTROUTING -s 10.8.1.0/24 ! -d 10.8.1.0/24 -j SNAT —to 123.x.x.xExecStop=/usr/sbin/iptables -D INPUT -p udp —dport 1194 -j ACCEPTExecStop=/usr/sbin/iptables -D FORWARD -s 10.8.1.0/24 -j ACCEPTExecStop=/usr/sbin/iptables -D FORWARD -m state —state RELATED,ESTABLISHED -j ACCEPTRemainAfterExit=yes[Install]WantedBy=multi-user.target

А ΠΏΠΎΡ‚ΠΎΠΌ:

$ sudo systemctl enable wireguard-iptables.service
$ sudo systemctl start wireguard-iptables.service
$ sudo systemctl stop wireguard-iptables.service

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

НадСюсь, Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ это ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ руководство ΠΏΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ /etc/rc.local ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ для обСспСчСния ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости ΠΈ простоты использовани systemd.

2020-11-09T09:26:03ΠœΠ°Π½ΡƒΠ°Π»

Π”Ρ€ΡƒΠ·ΡŒΡ ΠΏΠΎΠΌΠΎΠ³ΠΈΡ‚Π΅ этому ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Ρƒ ΡΡ‚Π°Ρ‚ΡŒ доступнСС Π² ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… сСтях.

НС ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈ ΠΌΠΈΠΌΠΎ ΠΆΠΌΠ°ΠΊΠ½ΠΈ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΡƒ Ρ‚ΠΎ Π΅Ρ‰Π΅ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ»Π΅Π·Π΅Π½!