script do ubuntu não existe tal arquivo /etc/init.d/ script

script do ubuntu não existe tal arquivo /etc/init.d/ script

estou tentando executar este script na inicialização, mas isso está constantemente me dando um erro que/etc/init.d/put_ubuntu_users: 14: /etc/init.d/put_ubuntu_users: cannot open ~/data.txt: No such file

Este é o meu roteiro

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

eu executei esse conjunto de comandos

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

Aliás, este script está funcionando normalmente se eu executá-lo manualmente digitando./put_ubuntu_users

Por favor, me diga o que estou fazendo de errado

Responder1

O erro está informando que não é possível encontrar o arquivo ~/data.txt. A razão é simples: os scripts /etc/init.d são executados como root e tenho certeza de que não há arquivo data.txt em /root, a página inicial do root. Você pode corrigir isso usando absolutecaminhos, não relativeuns.

Por outro lado, acho difícil entender o que um redirecionamento está fazendo após uma donedeclaração. O que exatamente você pretende fazer?

Responder2

O erro é dizer que o arquivo data.txt (para o diretório inicial dos usuários) não pode ser encontrado/acessado. A maneira mais fácil de corrigir isso é editar a última linha do script e alterar ~/data.txt para /home/{username_here}/data.txt

Responder3

Os serviços não possuem diretórios iniciais. Portanto, ~/data.txtnão faz o que você pensa que faz nesse contexto. Você precisa colocar o arquivo em algum lugar referenciado com um nome de arquivo estático.

Responder4

É provável que não exista uma pasta pessoal configurada para o usuário do processo init (o que é normal).

No início do seu script, adicione setuid myuser, que executará o script como esse usuário. Atualmente, o usuário init não tem uma pasta pessoal configurada (um palpite, caso contrário, ele gravaria no local da pasta pessoal). Um surpreendentemente útilPágina da Wikipédiasobre isso.

informação relacionada