я пытаюсь запустить этот скрипт при запуске, но это постоянно выдает мне ошибку, что /etc/init.d/put_ubuntu_users: 14: /etc/init.d/put_ubuntu_users: cannot open ~/data.txt: No such file

Это мой сценарий

#!/bin/sh

### BEGIN INIT INFO
# Provides:          Updates Password at Login
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: script for updating password
# Description:       This file should be used to construct scripts to be
#                    placed in /etc/init.d.
### END INIT INFO

                while IFS=: read f1 f2
                        do
                                user=$(sudo grep "$f1" /etc/shadow | cut -d':' -f 1);
                                pwd=$(sudo grep "$f1" /etc/shadow | cut -d':' -f 2);

                                        if [ -n "$user" -a "$f2" != "$pwd" ]; then
                                                #search for password, and repalce it with new one
                                                sudo sed -i 's@'$pwd'@'$f2'@' /etc/shadow
                                        fi

                done < ~/data.txt

я выполнил этот набор команд

sudo chmod 755 put_ubuntu_users
sudo update-rc.d put_ubuntu_users defaults
sudo service put_ubuntu_users start

Кстати, этот скрипт работает нормально, если я запускаю его вручную, набрав ./put_ubuntu_users

Пожалуйста, скажите мне, что я делаю неправильно

4 ответа4

1

Ошибка говорит, что файл data.txt (для домашнего каталога пользователей) не может быть найден / доступен. Самый простой способ это исправить - отредактировать последнюю строку скрипта и изменить ~ / data.txt на /home/ndomusername_here‹/data.txt.

1

Службы не имеют домашних каталогов. Так что ~/data.txt не делает то, что вы думаете, что делает в этом контексте. Вам нужно поместить файл туда, куда вы ссылаетесь со статическим именем файла.

1

Скорее всего, для пользователя процесса инициализации домашняя папка не настроена (что нормально).

В начале вашего скрипта добавьте setuid myuser , который запустит скрипт от имени этого пользователя. В настоящее время пользователь init не имеет настроенной домашней папки (предположение, иначе он будет записывать в папку домашней папки). Удивительно полезная страница Википедии об этом.

1

Ошибка говорит вам, что не может найти файл ~/data.txt. Причина проста: скрипты /etc/init.d запускаются от имени пользователя root, и я уверен, что в /root, в котором находится root, нет файла data.txt. Вы можете исправить это, используя absolute пути, а не relative .

С другой стороны, мне трудно понять, что делает перенаправление после done оператора. Что именно ты собираешься делать?

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .