Застрял в загрузке после попытки работы с скриптом init.d для запуска при загрузке

Я испортил загрузку на малине pi, которая предназначена для запуска важного проекта.

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

/etc/init.d/daemon_name start а также /etc/init.d/daemon_name stop

проблема с этим была, когда я добавил это в /etc/init.d и фактический скрипт к /usr/local/bin

Это содержимое скрипта init.d (я сделал это в соответствии с учебным пособием, поэтому я не ожидаю, что проблема будет отсюда):

#! /bin/sh
### BEGIN INIT INFO
# Provides:          main
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: RPi Heating Controller
# Description:       This file is used to run the heating controller script
#                    at boot time.
### END INIT INFO

# Author: 

# Change the next 3 lines to suit where you install your script and what you want to call it
DIR=/usr/local/bin/heating
DAEMON=$DIR/main
DAEMON_NAME=main

# Add any command line options for your daemon here
DAEMON_OPTS=""

# This next line determines what user the script runs as.
# Root generally not recommended but necessary if you are using the Raspberry Pi GPIO from Python.
DAEMON_USER=root

# The process ID of the script when it runs is stored here:
PIDFILE=/var/run/$DAEMON_NAME.pid

. /lib/lsb/init-functions

do_start () {
    log_daemon_msg "Starting system $DAEMON_NAME daemon"
    start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --chuid $DAEMON_USER --startas $DAEMON -- $DAEMON_OPTS
    log_end_msg $?
}
do_stop () {
    log_daemon_msg "Stopping system $DAEMON_NAME daemon"
    start-stop-daemon --stop --pidfile $PIDFILE --retry 10
    log_end_msg $?
}

case "$1" in

    start|stop)
        do_${1}
        ;;

    restart|reload|force-reload)
        do_stop
        do_start
        ;;

    status)
        status_of_proc "$DAEMON_NAME" "$DAEMON" && exit 0 || exit $?
        ;;
    *)
        echo "Usage: /etc/init.d/$DAEMON_NAME {start|stop|restart|status}"
        exit 1
        ;;

esac
exit 0

После этого я обновил параметры rc.d по умолчанию: update-rc.d defaults

Я не могу быть уверен, но я думаю, после этого он не загрузился ...

Я также попытался в какой-то момент использовать cronjob @reboot python script-name, и я уверен, что забыл & в конце для запуска по другой теме. Я пытался редактировать cron с SD-карты, хотя ничего не изменилось ...

Как я могу отключить эти сценарии загрузки непосредственно с SD-карты, чтобы снова загрузить Pi и исправить это?

Я просматриваю журналы, но я не уверен, что искать ...

Я запускаю Raspbian. Что-нибудь еще, что я могу получить с SD-карты и могу вам помочь, просто спросите, и я отправлю его здесь.

EDIT:

После публикации этого вопроса я понял, что ile goldilocks сказал: update-rc-d создает симлинки в каталогах уровня выполнения, которые я исправил, чтобы удалить все это ссылается на мой сценарий.

Как я уже сказал в комментарии к его ответу, я однажды использовал следующий скрипт в rc.local для обновления ssh (я размещение всего rc.local, чтобы люди не говорили, что он пропускает exit 0):

#!/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.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP" // (I edited this as a test, it now reads: echo "My IP address is %s\n" "$_IP" > /etc/IPFLAG)
fi

if [ -e /etc/SSHFLAG ]; then
  /usr/sbin/update-rc.d -f ssh defaults
  /bin/rm /etc/SSHFLAG
  /sbin/shutdown -r now
fi

exit 0

В настоящее время он загружается в точку, где я могу его пинговать с моего компьютера, но я не могу ssh к нему ...

После редактирования я могу сказать:

rc.local еще не запущен (SSHFLAG не был удален, и IPFLAG не был создан. Тем не менее я все еще могу выполнить ping для pi. ..)

Pi показывает активность на SD-карте и Ethernet-порту

Как и mazianni, содержимое моего inittab (подтверждает уровень запуска по умолчанию - 2):

# /etc/inittab: init(8) configuration.
# $Id: inittab,v 1.91 2002/01/25 13:35:21 miquels Exp $

# The default runlevel.
id:2:initdefault:

# Boot-time system configuration/initialization script.
# This is run first except when booting in emergency (-b) mode.
si::sysinit:/etc/init.d/rcS

# What to do in single-user mode.
~~:S:wait:/sbin/sulogin

# /etc/init.d executes the S and K scripts upon change
# of runlevel.
#
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.

l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
# Normally not reached, but fallthrough in case of emergency.
z6:6:respawn:/sbin/sulogin

# What to do when CTRL-ALT-DEL is pressed.
ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

# Action on special keypress (ALT-UpArrow).
#kb::kbrequest:/bin/echo "Keyboard Request--edit /etc/inittab to let this work."

# What to do when the power fails/returns.
pf::powerwait:/etc/init.d/powerfail start
pn::powerfailnow:/etc/init.d/powerfail now
po::powerokwait:/etc/init.d/powerfail stop

# /sbin/getty invocations for the runlevels.
#
# The "id" field MUST be the same as the last
# characters of the device (after "tty").
#
# Format:
#  <id>:<runlevels>:<action>:<process>
#
# Note that on most Debian systems tty7 is used by the X Window System,
# so if you want to add more getty's go ahead but skip tty7 if you run X.
#
1:2345:respawn:/sbin/getty --noclear 38400 tty1 
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6

# Example how to put a getty on a serial line (for a terminal)
#
#T0:23:respawn:/sbin/getty -L ttyS0 9600 vt100
#T1:23:respawn:/sbin/getty -L ttyS1 9600 vt100

# Example how to put a getty on a modem line.
#
#T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3


#Spawn a getty on Raspberry Pi serial line
T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100

Теперь содержимое каталога rc2.d:

$ ls -l
total 4
lrwxrwxrwx 1 root root  17 Sep  8  2014 K01lightdm -> ../init.d/lightdm
lrwxrwxrwx 1 root root  20 Sep 17  2014 K06nfs-common -> ../init.d/nfs-common
lrwxrwxrwx 1 root root  17 Sep 17  2014 K06rpcbind -> ../init.d/rpcbind
-rw-r--r-- 1 root root 677 Jul 14  2013 README
lrwxrwxrwx 1 root root  24 Oct 16 21:24 S01binfmt-support -> ../init.d/binfmt-support
lrwxrwxrwx 1 root root  18 Sep  8  2014 S01bootlogs -> ../init.d/bootlogs
lrwxrwxrwx 1 root root  20 Sep  8  2014 S01cgroup-bin -> ../init.d/cgroup-bin
lrwxrwxrwx 1 root root  17 Sep  8  2014 S01ifplugd -> ../init.d/ifplugd
lrwxrwxrwx 1 root root  14 Sep  8  2014 S01motd -> ../init.d/motd
lrwxrwxrwx 1 root root  18 Sep 19  2014 S01php5-fpm -> ../init.d/php5-fpm
lrwxrwxrwx 1 root root  17 Sep  8  2014 S01rsyslog -> ../init.d/rsyslog
lrwxrwxrwx 1 root root  14 Mar 26 17:18 S01sudo -> ../init.d/sudo
lrwxrwxrwx 1 root root  22 Sep  8  2014 S01triggerhappy -> ../init.d/triggerhappy
lrwxrwxrwx 1 root root  17 Sep 24  2014 S02apache2 -> ../init.d/apache2
lrwxrwxrwx 1 root root  14 Sep 24  2014 S03cron -> ../init.d/cron
lrwxrwxrwx 1 root root  14 Sep 24  2014 S03dbus -> ../init.d/dbus
lrwxrwxrwx 1 root root  24 Sep 24  2014 S03dphys-swapfile -> ../init.d/dphys-swapfile
lrwxrwxrwx 1 root root  14 Oct 16 21:24 S03lirc -> ../init.d/lirc
lrwxrwxrwx 1 root root  15 Sep 24  2014 S03mysql -> ../init.d/mysql
lrwxrwxrwx 1 root root  13 Sep 24  2014 S03ntp -> ../init.d/ntp
lrwxrwxrwx 1 root root  20 Sep 24  2014 S03postgresql -> ../init.d/postgresql
lrwxrwxrwx 1 root root  15 Sep 24  2014 S03rsync -> ../init.d/rsync
lrwxrwxrwx 1 root root  13 Sep 24  2014 S03ssh -> ../init.d/ssh
lrwxrwxrwx 1 root root  22 Oct 16 21:24 S04avahi-daemon -> ../init.d/avahi-daemon
lrwxrwxrwx 1 root root  17 Sep 24  2014 S04postfix -> ../init.d/postfix
lrwxrwxrwx 1 root root  18 Sep 24  2014 S05plymouth -> ../init.d/plymouth
lrwxrwxrwx 1 root root  18 Sep 24  2014 S05rc.local -> ../init.d/rc.local
lrwxrwxrwx 1 root root  19 Sep 24  2014 S05rmnologin -> ../init.d/rmnologin

Как вы можете видеть, это все символические ссылки, но файл README.

Итак, я просто получил доступ к телевизору HDMI, который я использовал в качестве монитора для пи, из-за отсутствия лучшего носителя, вот несколько скриншотов и, как я думаю, может произойти:

Первая остановка

Первая остановка - проблема, связанная с локалью. Раньше у меня были проблемы с локальностью, но они не мешали мне загружаться. Мне кажется странным, что сообщение: cannot open locale archive "/usr/lib/locale/locale-archive": Read-only file system В нем говорится, что он не может удалить тот же файл

Вторая остановка

Это изображение показывает некоторые проблемы с файловой системой ... я считаю, что SD может стать поврежденным в ближайшее время ... Он уже начал колотить, поэтому не удивительно, что там ... Тогда есть настройки сетевых интерфейсов, опять же, проблемы связанные с локалями ... Я не знаю, что об этом думать. Кроме того, есть ошибка, относящаяся к init.d

Последняя остановка

Он окончательно очищает temps, устанавливает ALSA, а затем зависает ... Я не знаю, что должно было произойти после этого, поскольку я никогда не видел экрана загрузки pi.

3 голоса | спросил Antero Duarte 31 MarpmTue, 31 Mar 2015 12:00:29 +03002015-03-31T12:00:29+03:0012 2015, 12:00:29

2 ответа


2

Как отметили goldilocks, вы можете определить свой уровень выполнения из /etc /inittab.

Предполагая, что он запускает уровень 2, и если в /etc/rc2.d ничего не было изменено, S03ssh вызывается до S05rc.local. Предположительно, что-то идет неправильно задолго до того, как вызывается rc.local.

Можете ли вы поделиться содержимым /etc/rc2.d (опять же, считая, что это ваш уровень запуска по умолчанию)? Я ожидаю, что они будут выглядеть примерно так:

K01lightdm     S01cgroup-bin  S01triggerhappy  S03dphys-swapfile  S05rc.local
K05nfs-common  S01ifplugd     S02apache2       S03ntp             S05rmnologin
K05rpcbind     S01motd        S03arpwatch      S03rsync
README         S01rsyslog     S03cron          S03ssh
S01bootlogs    S01sudo        S03dbus          S05plymouth

За исключением README, все они должны быть символическими.

ответил mazianni 31 MarpmTue, 31 Mar 2015 15:22:03 +03002015-03-31T15:22:03+03:0003 2015, 15:22:03
1
  

Как отключить эти сценарии загрузки непосредственно с SD-карты, чтобы я мог снова загрузить Pi.

Что означает update-rc.d, это создать набор символических ссылок из /etc/init.d для каталогов уровня выполнения, /etc/rcN.d, где N is from 0-6 или S. Они будут соответствовать тому, что указано здесь:

# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6

Стартовые ссылки будут выглядеть как S50daemon_name, ссылки остановки K50daemon_name, хотя «50» может быть любым числом от 0 до 99. Это определяет порядок запуска сценариев.

Итак, чтобы отключить материал, отредактировав карту, вам просто нужно удалить символические ссылки в каталогах уровня запуска. Если вы ленивы, вы можете просто удалить его в /etc/rc2.d, предположив, что ваш уровень запуска по умолчанию равен 2. Вы можете найти, что в верхней части /etc/inittab:

id:2:initdefault:

Но вы можете также стереть все из них. Мой совет вам в том, что из-за того, что вам это не нужно, хотя я немного предвзято: я не могу выдержать поворот Debian в SysV init, и я очень рад, что они отказываются от него для systemd.

Если вы просто хотите, чтобы это началось при загрузке, отредактируйте /etc/rc.local и добавьте туда свои команды. Удостоверьтесь, что ваш демон фактически вилки на фоне. Вам не нужно использовать sudo, так как этот скрипт запускается root после всего, что находится в каталоге уровня запуска по умолчанию.

ответил goldilocks 31 MarpmTue, 31 Mar 2015 13:59:29 +03002015-03-31T13:59:29+03:0001 2015, 13:59:29

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132