В обычном Ubuntu я создавал каталог для сокетов Unix следующим образом (скажем, для проекта foo
):
/ usr / lib / tmpfiles.d / foo.conf
/ run / foo 0770 <имя пользователя> <имя группы>
Затем при следующей перезагрузке будет создан каталог / run / foo
с необходимыми разрешениями. Причина, по которой я это делаю, заключается в том, что только root может писать в / var / run
, который ссылается на -> / run
, и для многих приложений характерно отказываться от привилегий и менять пользователя перед созданием сокет, и, следовательно, они не могут записать в / var / run
.
Теперь я использую WSL2 с Ubuntu 20.04, а systemd
не существует. Можно перепрыгнуть через множество обручей, чтобы заставить его работать, но они глючат.
Как создать папку с желаемыми разрешениями, которая очищается после перезагрузки до того, как какое-либо из установленных приложений (например, nginx / postgresql) попытается создать свои сокеты (и, следовательно, потерпит неудачу из-за устаревших сокетов до перезагрузки)?
Вместо служб init.d вам может повезти, если вы запишете полный путь к скрипту в файл
называется /etc/rc.local
(возможно, вам придется создать его) и сделать его исполняемым
Вот так:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
## Examples:
/usr/bin/foo # a program
/usr/local/bin/bar.sh # a shell script
/etc/init.d/foobar start # a service
exit 0
выход 0
важен!
Затем сделайте его исполняемым:
chmod +x /etc/rc.local
Все там будет запускаться как root при загрузке системы.
rc.local на самом деле устарел с 1983 и может больше не работать. Когда была введена новая, ныне устаревшая система SysV-Init, она послужила обходным путем для сохранения еще более старых методов инициализации системы, и ее больше не рекомендуется использовать.