ubuntu スクリプトにそのようなファイルはありません /etc/init.d/ スクリプト

ubuntu スクリプトにそのようなファイルはありません /etc/init.d/ スクリプト

起動時にこのスクリプトを実行しようとしていますが、常にエラーが発生します。/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。具体的に何をしようとしているのでしょうか?

答え2

エラーは、ファイル data.txt (ユーザーのホームディレクトリ用) が見つからない/アクセスできないことを示しています。これを修正する最も簡単な方法は、スクリプトの最後の行を編集し、~/data.txt を /home/{username_here}/data.txt に変更することです。

答え3

サービスにはホーム ディレクトリがありません。そのため、~/data.txtそのコンテキストでは期待どおりの動作は行いません。静的ファイル名で参照する場所にファイルを配置する必要があります。

答え4

init プロセス ユーザー用にホーム フォルダーが設定されていない可能性があります (これは正常です)。

スクリプトの先頭に を追加してsetuid myuser、そのユーザーとしてスクリプトを実行します。現在、init ユーザーにホーム フォルダが設定されていません (推測ですが、そうでなければホーム フォルダの場所に書き込むことになります)。驚くほど便利なWikipediaページこれについて。

関連情報