Это мой 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.
cd /root/server/srv/
./start_srv &
exit 0
Когда я сам выполняю
cd /root/server/srv/
./start_srv &
через терминал, он запускается нормально и все работает, но когда я пытаюсь сделать это через rc. местный это не начнется.
Я знаю, что rc.local не нужен sudo и т. Д. Я попытался выполнить rc.local самостоятельно через терминал, и я получаю сообщение об ошибке: «Не могу CD ...»
Что я делаю неправильно?
ls -ld / root: drwx------ 4 root root 4096
,
ls -ld / root / server: drwxr-xr-x 3 root root 4096
,
ls -ld / root / server / srv / start_srv: -rwxr-x--x 1 500 500 468420
ls -ld / root / server / srv: drwxrwxrwx 2 500 500 4096
Для проверки Вашего /etc/rc.local
сценарий необходимо использовать эту команду:
sudo service rc.local start
Когда система init
запускается rc.local
скрипты, которые это запускает как корень, но если Вы хотите проверить свой сценарий, необходимо стать корнем через sudo
команда.
Именно поэтому Вы получили ошибки как Can't CD to /root/server/srv/
.
Если Ваш сценарий не работает во время процесса запуска, полагает, что среда ограничивается, таким образом, необходимо определить отсутствующие переменные как потребности сценария.
Вот пример.
Ошибка: /bin/sh: 0: Illegal option -
происходит из-за DOS
формат файла.
Для фиксации его, необходимо установить dos2unix утилиту и преобразовать rc.local файл:
sudo dos2unix /etc/rc.local