script de ubuntu no existe tal archivo /etc/init.d/ script

script de ubuntu no existe tal archivo /etc/init.d/ script

Estoy intentando ejecutar este script al inicio, pero constantemente me da un error que/etc/init.d/put_ubuntu_users: 14: /etc/init.d/put_ubuntu_users: cannot open ~/data.txt: No such file

Este es mi guión

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

Había ejecutado este conjunto de comandos

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

Por cierto, este script funciona normalmente si lo ejecuto manualmente escribiendo./put_ubuntu_users

Por favor dime que estoy haciendo mal

Respuesta1

El error le indica que no puede encontrar el archivo ~/data.txt. La razón es simple: los scripts /etc/init.d se ejecutan como root y estoy bastante seguro de que no hay ningún archivo data.txt en /root, el hogar de root. Puedes solucionarlo utilizando absoluterutas, no relativeunas.

Por otro lado, me resulta difícil entender qué hace una redirección después de una donedeclaración. ¿Qué es exactamente lo que quieres hacer?

Respuesta2

El error indica que no se puede encontrar/acceder al archivo data.txt (para el directorio de inicio de los usuarios). La forma más sencilla de solucionar este problema es editar la última línea del script y cambiar ~/data.txt a /home/{username_here}/data.txt

Respuesta3

Los servicios no tienen directorios de inicio. Entonces ~/data.txtno hace lo que crees que hace en ese contexto. Debe colocar el archivo en algún lugar al que haga referencia con un nombre de archivo estático.

Respuesta4

Lo más probable es que no haya una carpeta de inicio configurada para el usuario del proceso de inicio (lo cual es normal).

Al comienzo de su secuencia de comandos, agregue setuid myuser, que ejecutará la secuencia de comandos como ese usuario. Actualmente, el usuario init no tiene una carpeta de inicio configurada (una suposición, de lo contrario escribiría en la ubicación de la carpeta de inicio). Un sorprendentemente útilpágina de wikipediasobre esto.

información relacionada