script ubuntu sem tal arquivo /etc/init.d/ script

0

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

Este é o meu script

#!/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 tinha executado esses conjuntos de comandos

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

BTW, esse script está funcionando normalmente se eu o executar manualmente digitando ./put_ubuntu_users

Por favor me diga que eu estou fazendo errado

    
por Fatima Zohra 27.11.2013 / 18:13

4 respostas

1

O erro está dizendo que não é possível encontrar o arquivo ~ / data.txt. O motivo é simples: os scripts /etc/init.d são executados como root e tenho certeza de que não há arquivo data.txt em / root, o home de root. Você pode corrigir isso usando absolute caminhos, não relative .

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

    
por 27.11.2013 / 18:40
1

O erro é dizer que o arquivo data.txt (para o diretório pessoal 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 o ~ / data.txt para /home/{username_here}/data.txt

    
por 27.11.2013 / 18:20
1

Os serviços não possuem diretórios de usuário. Portanto, ~/data.txt não faz o que você acha que faz nesse contexto. Você precisa colocar o arquivo em algum lugar que você faz referência com um nome de arquivo estático.

    
por 27.11.2013 / 18:22
1

Provavelmente, não há uma pasta home 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 do init não tem uma pasta home configurada (um palpite, caso contrário, ele gravaria no local da pasta principal). Uma surpreendentemente útil página da Wikipedia sobre isso.

    
por 27.11.2013 / 18:22