1 votes

Démarrage automatique permanent

Je voudrais faire un script Python 3.4 qui démarre avec mon ordinateur de sorte qu'il soit vérifié en permanence pour démarrer avec l'ordinateur (edit : vérifié en permanence signifie qu'il ne peut pas être désactivé via xfce4-session-settings). (Edit : Cela devrait affecter tous les utilisateurs, même les futurs, mais si vous avez répondu avant que je dise cela, je ne le prendrai pas en compte pour savoir si je l'accepte). Le script n'a pas besoin de se terminer, en particulier. Je ne veux pas que les utilisateurs non privilégiés puissent le décocher. Comment dois-je m'y prendre ?

Actuellement, ils ne peuvent pas supprimer ou modifier (ou même voir les détails) l'entrée (heureusement), car elle est faite pour tous les utilisateurs (même les futurs). Cependant, ils peuvent la décocher sans problème, il semble.

(J'ai activé l'ensemble pour tous les utilisateurs en ajoutant une balise myScript.desktop pour /etc/xdg/autostart et lui a donné le texte suivant :

[Desktop Entry]
Type=Application
Name=NameOfMyScript
Exec=MyScript
Icon=system-run
X-GNOME-Autostart-enabled=True

)

Le script permet de mettre à jour mon adresse IP pour un filtre web basé sur le dns. Il vérifie périodiquement la perte de connexion au cas où le routeur aurait été réinitialisé et l'adresse IP modifiée.

Je suis sur Xubuntu 14.04, 64-bit.

0voto

Pep Points 166

Édité...

Je pense que vous cherchez une solution du type "init script". Il existe un exemple simple ici : https://unix.stackexchange.com/questions/6697/run-Python-script-sur-démarrage et un autre ici : http://mobiarch.wordpress.com/2014/05/16/creating-an-init-script-en-ubuntu-14-04/

En bref : Vous mettez votre script à par ex. /usr/local/bin/my_script.py (ce n'est pas nécessaire, vous pouvez l'exécuter même depuis votre répertoire personnel)

N'oubliez pas de le faire :

sudo chmod +x /usr/local/bin/my_script.py

Ensuite, dans /etc/init.d vous créez un fichier, par exemple my_script avec le contenu suivant :

#!/bin/sh
# /etc/init.d/my_script
# Description: Starts Python script my_script
# ————————————————–
#
### BEGIN INIT INFO
# Provides: my_script
# Required-Start: $network $local_fs $syslog
# Required-Stop: $local_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Description: Start Python script my_script
### END INIT INFO

case $1 in
  start)
    echo -n "Starting my_script: "
    /usr/bin/python /usr/local/bin/my_script.py &
    ;;
  *)
    echo "Usage: my_script start"
    exit 1
esac

Puisque vous voulez que ce script démarre au démarrage, exécutez cette commande :

sudo update-rc.d my_script defaults

Je ne suis pas sûr de comprendre ce que vous voulez dire par "J'ai besoin qu'il lance le script après que Python 3.4 soit disponible, car c'est un script Python ;". S'il vous plaît, essayez de cette façon et faites-moi savoir si cela démarre ou non.

Encore édité... Bref, j'y pensais... Si votre script Python ne peut pas être lancé jusqu'à un événement incertain, peut-être que vous pouvez juste créer un simple script bash... quelque chose comme ça :

#!/bin/bash

STARTED=0
while [ $STARTED == 0 ]
do
    ./myscript.py && STARTED=1
    sleep 1
done

0voto

Eh bien, j'ai trouvé une solution de fortune. Donc, j'ai pensé que je devais partager. Je ne m'attends pas à ce qu'elle soit la réponse acceptée, cependant (mais elle fonctionne). Elle peut ou non être dangereuse.

Il s'agit de copier xfc4-session-settings de /usr/bin dans le dossier bin de tous les utilisateurs que je veux réellement pouvoir utiliser (par exemple /home/sally/bin). Ensuite, supprimez-le de /usr/bin. Ensuite, changez les permissions sur les répertoires bin personnels afin que les utilisateurs non autorisés ne puissent pas y accéder. Ainsi, tous les futurs utilisateurs ne pourront pas voir ce qui démarre automatiquement. L'inconvénient est qu'ils ne peuvent rien voir (bien que ce soit une bonne chose qu'ils ne puissent pas voir le script). Gardez une copie pour la remettre en place si jamais vous en avez vraiment besoin à cet endroit. Redémarrez (si les dossiers bin n'étaient pas déjà là).

J'ai simplement essayé de modifier les autorisations avant d'essayer de le supprimer, mais il a quand même réussi à s'ouvrir pour des utilisateurs qui n'auraient pas dû y avoir accès.

0voto

Pep Points 166

Une autre solution que j'ai utilisée est basée sur Upstart un truc assez puissant. Peut-être que vous n'en avez pas besoin du tout. http://upstart.ubuntu.com/cookbook/

Créons un fichier dans votre maison /home/your_user_name/scripts/my_script.conf avec ce contenu :

# my_script.conf

description "here goes the description for my_script"
author "Peter Farkas @ InDaLine"

# Stanzas
#
# Stanzas control when and how a process is started and stopped
# See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn

# When to start the service
start on runlevel [2345]

# When to stop the service
stop on runlevel [016]

# Automatically restart process if crashed
respawn

# Essentially lets upstart know the process will detach itself to the background
expect fork

# Run before process
pre-start script
   setuid pep
   chdir /home/your_user_name/scripts
end script

# Start the process
exec /usr/bin/python /home/your_user_name/scripts/my_script.py & 

# Run after process start
post-start script
    echo "my_script.py started"
end script

Nous devons le rendre exécutable :

sudo chomd +x /home/your_user_name/scripts/my_script.conf

Après cela, liez ce fichier .conf au fichier /etc/init répertoire :

sudo ln -s /home/your_user_name/scripts/my_script.conf /etc/init/my_script.conf

Si je me souviens bien après ces étapes, mon script démarrait après chaque redémarrage et redémarrait si une erreur se produisait. Comme je pense que vous ne voulez peut-être pas que votre script s'exécute pour toujours, vous n'avez pas besoin de l'étape de l'enregistrement. respawn dans ce fichier, mais peut-être que c'est exactement ce dont vous avez besoin alors j'ai juste laissé là. (Mon script est destiné à fonctionner pour toujours et s'il s'arrête d'une manière ou d'une autre, il doit être redémarré immédiatement).

Je ne suis toujours pas sûr de ta phrase "J'ai besoin qu'il démarre le script après que Python 3.4 soit disponible, car c'est un script Python ;" mais Upstart se dit "event based" donc tu peux avoir besoin de ça pour affiner les conditions de démarrage...

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X