Autostart permanente

1

Eu gostaria de fazer um script Python 3.4 que comece com o meu computador para que ele seja verificado permanentemente para iniciar com o computador (edit: permanentemente verificado significa que ele não pode ser desabilitado via xfce4-session-settings). (Edit: Isso deve afetar todos os usuários, mesmo os futuros, mas se você respondeu antes de eu dizer isso, não vou levar em conta se eu aceito isso.) O script não precisa terminar, particularmente. Não quero que usuários sem privilégios possam desmarcá-lo. Como eu faria isso?

Atualmente, eles não podem excluir ou editar (ou até mesmo visualizar os detalhes) a entrada (felizmente), porque ela é feita para todos os usuários (mesmo os futuros). No entanto, eles podem desmarcá-lo bem, parece.

(ativei isso para todos os usuários adicionando um arquivo myScript.desktop a /etc/xdg/autostart e dei o seguinte texto:

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

O script permite que meu endereço IP de um filtro da Web baseado em dns seja atualizado. Ele verifica periodicamente uma conexão perdida caso o roteador tenha sido redefinido e o endereço IP tenha sido alterado.

Estou no Xubuntu 14.04, 64 bits.

    
por Shule 30.08.2014 / 16:33

3 respostas

0

Editado ...

Acho que você está procurando uma solução de 'script de inicialização'. Há um exemplo simples aqui: link e outro aqui: link

Resumidamente: Você coloca seu script em, por exemplo /usr/local/bin/my_script.py (não é necessário, você pode executá-lo até mesmo no seu diretório pessoal)

Não se esqueça de:

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

Em seguida, em /etc/init.d você cria um arquivo, por exemplo my_script com o seguinte conteúdo:

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

Como você deseja que este script inicie na inicialização, execute este comando:

sudo update-rc.d my_script defaults

Eu não tenho certeza se eu entendi "Eu preciso disso para iniciar o script depois que o Python 3.4 estiver disponível, já que é um script Python;" Por favor, tente desta forma e deixe-me saber se ele começa ou não.

Editado novamente ... Enfim, eu estava pensando sobre isso ... Se o seu script python não pode ser iniciado até algum evento incerto, talvez você possa simplesmente criar um script bash simples ... algo assim:

#!/bin/bash

STARTED=0
while [ $STARTED == 0 ]
do
    ./myscript.py && STARTED=1
    sleep 1
done
    
por Pep 30.08.2014 / 18:24
0

Outra solução que usei é baseada em Upstart , uma coisa bastante poderosa. Talvez você não precise disso. link

Vamos criar um arquivo em sua casa /home/your_user_name/scripts/my_script.conf com este conteúdo:

# 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

Precisamos torná-lo executável:

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

Depois disso, vincule esse arquivo .conf ao diretório /etc/init :

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

Como eu me lembro depois dessas etapas, meu script foi iniciado após cada reinicialização e reiniciado se algum erro ocorreu. Como eu acho que você pode não querer que seu script seja executado para sempre, então você não precisa da parte respawn neste arquivo, mas talvez isso seja exatamente o que você precisa, então eu acabei de sair de lá. (Meu script tem a intenção de ser executado para sempre e, se parar de alguma forma, ele precisa ser reiniciado imediatamente).

Eu ainda não tenho certeza sobre a sua frase "Eu preciso disso para iniciar o script depois que o Python 3.4 se tornar disponível, já que é um script Python;" mas Upstart é chamado de "evento baseado", então você pode precisar disso para afinar as condições de partida ...

    
por Pep 01.09.2014 / 08:04
0

Bem, eu encontrei uma solução maluca. Então, pensei em compartilhar. Eu não estou esperando que seja a resposta aceita, no entanto (mas funciona). Pode ou não ser perigoso.

Isso é copiar xfc4-session-settings de / usr / bin para a pasta bin de todos os usuários que eu realmente quero poder usar (por exemplo, / home / sally / bin). Em seguida, exclua-o de / usr / bin. Em seguida, altere as permissões nos diretórios da bandeja inicial para que usuários não autorizados possam acessá-los. Assim, todos os futuros usuários não podem ver o que é o início automático. A desvantagem é que eles não podem ver nada disso (embora seja bom que eles não possam ver o script). Guarde uma cópia para colocá-la de volta, se você realmente precisar dela. Reinicie (se as pastas bin ainda não estiverem lá).

Eu tentei apenas alterar as permissões antes de tentar excluí-lo, mas ele ainda conseguiu abrir para usuários que não deveriam ter acesso a ele.

    
por Shule 30.08.2014 / 20:31