Come eseguire il demone Dropbox in background?


38

Sto usando Debian 6 e Dropbox. Ho seguito questi comandi per installarlo.

Quando corro ~/.dropbox-dist/dropboxd, Dropbox funziona e altro. Il problema è che quando chiudo il terminale o, peggio ancora, il riavvio, Dropbox smette di funzionare e devo eseguire di nuovo quel demone.

Come posso avere il computer avviare automaticamente quel demone in background?


Hai provato lo script Python collegato di seguito nello stesso sito Web? Sembra essere mirato al controllo del demone. (Non ho accesso a un bancomat basato su debian per provare da solo).
WhyNotHugo

Risposte:


51

Se stai eseguendo il demone dal tuo account, avviarlo all'avvio con Cron . Esegui crontab -eper modificare il file crontab e aggiungere la riga

@reboot ~/.dropbox-dist/dropboxd

Mentre questo funzionerebbe, idealmente sarebbe meglio creare lo script di servizio /etc/init.d/utilizzando lo script scheletro contenuto all'interno. È quindi possibile aggiungere il service dropbox startcron al riavvio e avere ancora la possibilità di interrompere il servizio e riavviarlo.
sparticvs

@sparticvs - Dropbox non funzionerà come root se lo metti in init.d? Dropbox può essere configurato per l'esecuzione per utente. Il dropboxd può essere condiviso tra utenti utilizzando account Dropbox diversi?
Lord Loh.

@LordLoh. buon punto. Tuttavia, è possibile passare a chi si desidera eseguire come. Ho trovato questa risorsa. Sembra nuovo
sparticvs

1
@LordLoh. @sparticvs Penso che ci sia una soluzione per l' init.desecuzione come problema di root. Ho pubblicato una mia risposta, ma la soluzione su pixeldust.wikidot.com/linode-setup%3adropbox sembra funzionare bene.
Zac,

13

eseguire il comando in questo modo:

($HOME/.dropbox-dist/dropboxd &)&

questo distaccerà il processo dal terminale reale e lo metterà in background reale.

Tuttavia, dovrai comunque riavviarlo manualmente dopo il riavvio.


11

Ecco la mia soluzione Questo è su Debian 8.

Installa Dropbox secondo le istruzioni standard. Finora, ho solo un utente collegato, non so se questo funzionerà con più utenti in quanto Dropbox sembra registrare la macchina e non l'account utente di Linux. Se sai come far funzionare più account utente su un server facci sapere.

https://www.dropbox.com/en_GB/install?os=lnx

Quindi installa le istruzioni dello script di controllo python ma inseriscilo in / usr / bin e non nel cestino della directory home.

Creare il file /lib/systemd/system/dropbox@.service:

[Unit]
Description=Dropbox as a system service user %i

[Service]
Type=forking
ExecStart=/usr/bin/dropbox start
ExecStop=/usr/bin/dropbox stop
User=%i
Group=%i
# 'LANG' might be unnecessary, since systemd already sets the
# locale for all services according to "/etc/locale.conf".
# Run `systemctl show-environment` to make sure.
Environment=LANG=en_US.utf-8

[Install]
WantedBy=multi-user.target

Abilita il servizio per l'utente fred:

$ sudo systemctl enable dropbox@fred.service

Quindi avviare il servizio:

$ sudo systemctl start dropbox@fred.service

Mi piace la tua risposta, solo un paio di cose che cambio. Aggiungerei After=network.targetsotto [Unit]e metterei il file python in /usr/local/binper unix.stackexchange.com/questions/8656/…
meffect

5

Puoi anche eseguire come demone facendo daemon $HOME/.dropbox-dist/dropboxd.

Ciò ha il vantaggio che se si passa ulteriormente la -n/--namebandiera, è possibile utilizzare daemon --[running|restart|stop] -n <name>per controllare il processo.

Forse qualcun altro è in grado di capire come utilizzare daemonal meglio i demoni per eseguire all'avvio ...


3

Puoi trovare gli script init.d Debian e Ubuntu , basta copiarli in /etc/init.d/dropbox e personalizzare con il nome utente.

Abilita in debian con chkconfig --add dropbox. Quindi eseguire come qualsiasi altro servizio.


3

Dai un'occhiata qui:

https://community.spiceworks.com/topic/131973-dropbox-headless-workstation?page=1#entry-6076539

Un utente ha menzionato:

Ho pensato di menzionare:

(a) le ultime distribuzioni sembrano rendere questo abbastanza diretto, appena eseguito dropbox startdalla riga di comando, MA (b) fare attenzione per accedere e uscire con X11 inoltrato.

Ho impostato molti alias Bash per la connessione a varie macchine e tutti includono l' -Xopzione per inoltrare i pacchetti X11. Per questo motivo, Dropbox ha continuato a morire al mio logout, anche eseguendolo sotto screene con nohup. Apparentemente, avere X11 inoltrato stava causando Dropbox per collegare il processo dbus sul mio computer locale piuttosto che sul computer remoto; così, quando ho interrotto la connessione, Dropbox vedeva dbus terminato e quindi si stava chiudendo da solo.

Cordiali saluti, dato che questo mi ha sconcertato per un po '. La chiave era che dovevo premere Ctrl, Canche dopo essersi disconnesso / eseguito exit sul computer remoto. Apparentemente, SSH stava mantenendo la sessione aperta, anche se ero uscito da Bash, a causa della restante connessione aperta.

La soluzione è semplice anche se uno (per qualche motivo) vuole continuare a scrivere con -X: prima di lanciare Dropbox dovresti "interrompere" l'inoltro facendo ad esempio:

$ unset DISPLAY

Se ciò avviene in uno script Bash, l'inoltro viene "interrotto" appena all'interno dello script, ma una volta eseguito, il "terminale" continua a essere inoltrato.


3

Ecco la mia soluzione per le distribuzioni Linux utilizzando Upstart 1.4 e versioni successive.

Salvare i contenuti di seguito in un file di configurazione sotto /etc/init, ad esempio /etc/init/db_user.conf:

# Dropbox upstart script for user db_user, db_user can be replaced by anything you like.

description "Dropbox db_user"
author "myth384"

start on runlevel [2345]
stop on runlevel [!2345]

respawn

setuid db_user
# The next two lines are optional. I use these to be able to share the 
#   Dropbox using Samba. Within group shareusers are all Samba users.
# setgid shareusers
# umask 0002

# The next line is necessary to be able to synchronise files with non-ASCII characters.

env LANG="en_US.UTF-8"     
exec /home/db_user/.dropbox-dist/dropbox

Per avviare il demone senza riavviare:

sudo start db_user

NOTA: decommentando la riga setgid non è necessario impostare il flag setgid sulla .dropbox.cachecartella come indicato da altre fonti su Internet.


2

Puoi usare screen :

screen -dmS ~/.dropbox-dist/dropboxd

Questo lo avvierà come demone e in modalità distaccata.

Dovresti quindi scrivere il tuo script init.d per farlo funzionare come servizio in questo modo e aggiungere una riga dopo #!/bin/bashper chkconfige aggiungere i livelli di esecuzione necessari, come 2, 3, 4, 5. Diverse distribuzioni hanno livelli di esecuzione diversi, quindi dovresti controllare questo.


1

C'è un modo abbastanza carino per aggiungere questo a init.ddescritto qui . Devi aggiungere gli utenti per cui vuoi avviare Dropbox allo script init (abbastanza facile) e quando il sistema si avvia, avvierà il demone Dropbox per ciascuno di quegli utenti.

L'unica cosa da notare è che specificano DAEMON=.dropbox-dist/dropboxquale credo non sia corretto. Alla fine l'autore ha dimenticato d- dovrebbe esserlo DAEMON=.dropbox-dist/dropboxd.


1

Potrebbe non essere utile per tutte le distro Linux, ma in CentOS 7, dal menu Applicazioni / Strumenti di sistema / menu, aprire " Applicazioni di avvio ". Quindi fai clic su Aggiungi e inserisci questo comando:

/home/username/.dropbox-dist/dropboxd

o

/home/.dropbox-dist/dropboxd

inserisci qui la descrizione dell'immagine


@roaima grazie per il tuo giudizio. Quale altra soluzione? Ho appena pubblicato la soluzione che ha funzionato per me.
Aryo Z

0

Ho aggiunto le seguenti righe alla fine del mio file .profile. Preferisco che il computer si avvii al terminale. Tuttavia, se avvio X11 dopo questo, l'applet dropbox non viene visualizzata nella barra delle applicazioni.

dropbox running
rv=$?
if [ $rv -eq 0 ]; then
    dropbox start;
fi

Supponendo che tu significhi davvero [ $rv -eq 0](e non [ $rv -ne 0 ]) che potresti semplificare tutto condropbox running && dropbox start
roaima



-1

La soluzione è come altri programmi Python:

shell$ nohup ~/.dropbox-dist/dropboxd & 

-2

Penso che il modo migliore sia creare un nuovo file in / usr / bin con questo codice:

#!/bin/bash

~/.dropbox-dist/dropboxd

salvalo e chiamalo "dropbox". Ora puoi eseguire dalla console in background o creare un collegamento nel menu / desktop


2
Questo non è corretto in quanto verrebbe eseguito in primo piano. Dovresti ancora fare dropbox &per inviarlo in background. Inoltre, se la connessione del terminale è terminata, il segnale di Hangup interromperà il processo.
sparticvs
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.