Ubuntu-Skript, keine solche Datei /etc/init.d/ Skript

Ubuntu-Skript, keine solche Datei /etc/init.d/ Skript

ich versuche, dieses Skript beim Start auszuführen, aber es gibt mir ständig den Fehler, dass/etc/init.d/put_ubuntu_users: 14: /etc/init.d/put_ubuntu_users: cannot open ~/data.txt: No such file

Das ist mein Skript

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

Ich habe diese Befehle ausgeführt

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

Übrigens funktioniert dieses Skript normal, wenn ich es manuell ausführe, indem ich./put_ubuntu_users

Bitte sagen Sie mir, was ich falsch mache

Antwort1

Der Fehler besagt, dass die Datei ~/data.txt nicht gefunden werden kann. Der Grund ist einfach: /etc/init.d-Skripte werden als Root ausgeführt und ich bin ziemlich sicher, dass sich in /root, dem Stammverzeichnis von Root, keine Datei data.txt befindet. Sie können das beheben, indem Sie absolutePfade und keine relativeEinsen verwenden.

Andererseits ist es für mich schwer zu verstehen, was eine Umleitung nach einer doneAnweisung bewirkt. Was genau wollen Sie damit erreichen?

Antwort2

Der Fehler besagt, dass die Datei data.txt (für das Home-Verzeichnis des Benutzers) nicht gefunden/aufgerufen werden kann. Dies lässt sich am einfachsten beheben, indem Sie die letzte Zeile des Skripts bearbeiten und ~/data.txt in /home/{username_here}/data.txt ändern.

Antwort3

Dienste haben keine Home-Verzeichnisse. ~/data.txtIn diesem Kontext tut es also nicht das, was Sie denken. Sie müssen die Datei an einem Ort ablegen, auf den Sie mit einem statischen Dateinamen verweisen.

Antwort4

Es besteht die Möglichkeit, dass für den Init-Prozessbenutzer kein Home-Ordner eingerichtet ist (was normal ist).

Fügen Sie am Anfang Ihres Skripts hinzu setuid myuser, wodurch das Skript als dieser Benutzer ausgeführt wird. Derzeit hat der Init-Benutzer keinen Home-Ordner eingerichtet (eine Vermutung, sonst würde er in den Home-Ordner schreiben). Ein überraschend nützlicherWikipedia-Seitedarüber.

verwandte Informationen