Это довольно просто. Я создал здесь файл rc.local:
/etc/rc.local
Я сделал его исполняемым. Однако он не запускается, когда я загружаю сервер. Я вижу его в каталоге, и когда пытаюсь запустить его вручную, получаю следующее сообщение:
root@:/etc# rc.local
rc.local: command not found
Мой файл rc.local выглядит следующим образом:
#!/bin/sh -e
# FUNCTIONS
function setup_logs
{
exec > >(tee -a /var/log/deploy.log)
exec 2> >(tee -a /var/log/error.log)
}
# COMMANDS
setup_logs
apt-get update # Update aptitude list
apt-get -y dist-upgrade # Upgrade aptitude programs
cd /etc/spider && git pull # Update deployment code
cd /etc/code && git pull # Update library code
cd /etc/code && deployment.sh # Run deployment script
exit 0
Да хоть убей, я не понимаю, в чем я ошибаюсь, может ли кто-нибудь мне помочь?
Ubuntu по умолчанию использует тире в качестве оболочки, а тире не знает ключевое слово function
.
Попробуй сменить шебанг на
#!/bin/bash
и выполнить снова.
В соответствии с https://wiki.ubuntu.com/DashAsBinSh/#function , также должно помочь, если вы просто удалите слово function
и напишите круглые скобки за именем функции:
setup_logs() {
exec > >(tee -a /var/log/deploy.log)
exec 2> >(tee -a /var/log/error.log)
}
Убедитесь, что сценарий запуска находится в папке уровня запуска rc.
/etc/rc2.d/S22rc.local или что-то подобное.
Ребята, действительно помогло бы, если бы вы погуглили о $ PATH. Как только вы освоите его, вы можете запускать все, что хотите, графический интерфейс или нет, если он находится в правильном $ PATH
Для OP вы были в / etc, и это исполняемый файл. Чтобы запустить его прямо здесь, поставьте перед ним косую черту, чтобы сказать: «Запустите его отсюда СЕЙЧАС», а не просто введите имя файла - это было похоже на «ok run rc.local, если вы можете найти его в своем $ ДОРОЖКА'.
введите 'echo $ PATH' в терминале, и вы начнете понимать, особенно если вы хотите освоить CLI
Теперь не начинайте помещать / etc в PATH; Я хотел, чтобы вы увидели, почему после исправления разрешений ничего не изменилось.