скрипт ubuntu немає такого сценарію /etc/init.d/


0

Я намагаюся запустити цей сценарій при запуску, але це постійно дає мені помилку /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

Скажіть, будь ласка, що я роблю неправильно

Відповіді:


1

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

З іншого боку, мені важко зрозуміти, що відбувається перенаправлення після doneзаяви. Що саме ти маєш намір робити?


Дякуємо його роботі! :) фактично я замінюю пароль користувача в / etc / shadow
Фатіма Зохра

1

Помилка говорить про те, що файл data.txt (для домашнього каталогу користувачів) неможливо знайти / отримати доступ. Найпростіший спосіб виправити це - відредагувати останній рядок сценарію та змінити ~ / data.txt на /home/{username_here}/data.txt


1

У службах немає домашніх каталогів. Тому ~/data.txtне робиш того, що, на вашу думку, робить у цьому контексті. Вам потрібно помістити файл кудись, на який ви посилаєтесь, зі статичним іменем файлу.


1

Ймовірно, що для користувача програми init не створена домашня папка (що є нормальним).

На початку вашого сценарію додайте setuid myuser, який запустить сценарій як цей користувач. Наразі користувач init не налаштовує домашню папку (здогадка, інакше він запише до місця розташування домашньої папки). Напрочуд корисна сторінка Вікіпедії про це.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.