Невозможно запустить скрипт при запуске в Ubuntu

Невозможно запустить скрипт при запуске в Ubuntu

Я просто хочу выполнить скрипт при запуске системы, но после многих попыток и следования многочисленным руководствам и документации я не могу этого сделать.

Можете ли вы заметить, что я делаю неправильно?

Запустите Ubuntu 20.04 в Docker:

docker run -d --name daemon ubuntu:20.04 tail -f /dev/null

Подключитесь к нему:

docker exec -it daemon /bin/bash

Писать /etc/init.d/test:

#!/bin/bash
### BEGIN INIT INFO
# Provides:          Join the Swarm
# Default-Start:     4
# Default-Stop:      0 6
# Description:       Join the Swarm
### END INIT INFO
start(){
        /usr/bin/echo start >> /var/log/test.log
}
stop(){
        /usr/bin/echo stop >> /var/log/test.log
}

case "$1" in
  start)
    start;;
  stop)
    stop;;
  status)
    cat /var/log/test.log;;
  restart)
    stop;
    start;
    ;;
  *);;
esac
exit 0;

Установите разрешения и включите службу:

chmod 755 /etc/init.d/test
update-rc.d test defaults 91
update-rc.d test enable

Проверьте, что это действительно работает:

service test restart
service test status

Должен быть выведен:

stop
start

Удалите файл журнала и выйдите из сеанса:

rm -rf /var/log/test.log
exit

Перезагрузите контейнер и подключитесь к нему снова:

docker restart daemon
docker exec -it daemon /bin/bash

Проверьте, действительно ли услуга активна:

service --status-all

К сожалению, это так и не было реализовано:

root@407a8e2c90ee:/# service test status
cat: /var/log/test.log: No such file or directory

Кажется, с RC все в порядке:

root@407a8e2c90ee:/# ls /etc/rc*.d
/etc/rc0.d:
K01test

/etc/rc1.d:

/etc/rc2.d:

/etc/rc3.d:

/etc/rc4.d:
S01test

/etc/rc5.d:

/etc/rc6.d:
K01test

/etc/rcS.d:
S01procps

решение1

что я понял из вашего вопроса: вы хотите запустить контейнер ubuntu:20.04 и внутри этого контейнера запустить дополнительную службу.

  1. здорово видеть вас в семье сторонников контейнеров.
  2. Описанная вами проблема не связана с Ubuntu, это поведение контейнеров по умолчанию.
  3. при запуске контейнера выполняется один скрипт, в вашем случае tail -f /dev/null- больше ничего. Контейнер Ubuntu не является полноценной виртуальной машиной Ubuntu!
  4. обычный процесс загрузки ubuntu не происходит внутри контейнера. ваш сервис никогда не трогается. Как действовать:
  5. вместо использования docker run ...рекомендую проверить docker-composeи синтаксис docker-compose.yamlфайла
  6. проверьте параметр commandилиentrypoint

Связанный контент