Jeg har nogle problemer med at køre programmer ved opvågningen.
Det jeg vil er at genstarte Dropbox fordi den bruger op mod et minut efter opvågning på at "opdage" at filerne ikke længere er synkroniseret, dvs. at jeg risikerer at overskrive en fil med en ældre version. Et ret velkendt problem med Dropbox i øvrigt.
Min ide er derfor at stoppe og starte Dropbox for at gennemtvinge en opdatering.
I en terminal virker følgende kommando fint:
pgrep dropbox && (dropbox stop; dropbox start)
Dvs. hvis Dropbox kører, så stop og start den igen.
Men kørt via et script i /etc/pm/sleep.d/ virker det ikke.
Når jeg forsøger at stoppe Dropbox, kommer følgende i loggen:
Dropbox isn't running!
Og når jeg forsøger at starte den, så:
The Dropbox daemon is not installed!
Det er altså som om at systemet er i en fase hvor programmer ikke virker som normalt.
pm-utils hook scripts køres som root.
Uden at vide noget om dropbox, lader det til at den er bruger specifik, så prøv at kør den fra scriptet som din normale bruger.
su marlar -c "pgrep dropbox && (dropbox stop; dropbox start)"
Jeg vil tro at problemet kommer af at du ikke har nogen association mellem den shell kommandoen bliver kørt fra, og gnome. På samme måde som du heller ikke kan starte gui programmer fra tty1.
En mulig løsning (og nu er jeg ude i noget gætteri) kunne være at lave en event listener process som du kører fra gnome autostart. Istedet for at starte dropbox fra dit pm-utils hook fyrer du en event efter din event listener som så kører dropbox kommandoen
#!/bin/bash
#event listener process
restart_dropbox(){
pgrep dropbox && (dropbox stop; dropbox start)
}
trap restart_dropbox SIGINT
while true; do
sleep 1
done
trap reagerer nu på SIGINT signalet som du sender med kill, så dit pm-utils hook skal se således ud
kill -SIGINT `pgrep restart_db_event_listener`
Det er ret spøjst, det her dropbox. Når jeg sender et SIGINT til scriptet manuelt virker det fint, også når jeg sender fra root og scriptet kører som min egen user.
Men når signalet kommer fra pm-utils, så går dropbox i en form for limbo, hvor ikonet er der uden det lille hak der signalerer at sync er uptodate. Samtidig kan jeg ikke stoppe dropbox, den siger "Dropbox isn't running!", men hvis jeg så prøver at starte den, siger den "Dropbox is already running!".
Jeg kan dog godt stoppe dropbox ved at højreklikke på ikonet og vælge "Stop Dropbox".
Kommentarer12
Re: Kørsel af script når computeren vågner fra dvale
Se hvordan her: http://wiki.archlinux.org/index.php/Pm-utils#Creating_your_own_hooks
Du skal så kun bekymre dig om "thaw" parameteren efter en suspend to disk.
Re: Kørsel af script når computeren vågner fra dvale
1000 tak :-)
Re: Kørsel af script når computeren vågner fra dvale
Det jeg vil er at genstarte Dropbox fordi den bruger op mod et minut efter opvågning på at "opdage" at filerne ikke længere er synkroniseret, dvs. at jeg risikerer at overskrive en fil med en ældre version. Et ret velkendt problem med Dropbox i øvrigt.
Min ide er derfor at stoppe og starte Dropbox for at gennemtvinge en opdatering.
I en terminal virker følgende kommando fint:
pgrep dropbox && (dropbox stop; dropbox start)
Dvs. hvis Dropbox kører, så stop og start den igen.
Men kørt via et script i /etc/pm/sleep.d/ virker det ikke.
Når jeg forsøger at stoppe Dropbox, kommer følgende i loggen:
Dropbox isn't running!
Og når jeg forsøger at starte den, så:
The Dropbox daemon is not installed!
Det er altså som om at systemet er i en fase hvor programmer ikke virker som normalt.
Noget bud på hvad er galt?
Re: Kørsel af script når computeren vågner fra dvale
Det kan de værre du skal have en forsinkelse ind således at komandoen først kører når systemet er fult vågent.
Re: Kørsel af script når computeren vågner fra dvale
Jeg har også prøvet med en forsinkelse, men måske ikke stor nok. Vil prøve 10 sek.
Re: Kørsel af script når computeren vågner fra dvale
Re: Kørsel af script når computeren vågner fra dvale
Hvordan Dropbox er sat op? Tja, har bare installeret den iflg. deres hjemmeside. Jeg kan se at den binære fil er
/home/marlar/.dropbox-dist/dropbox
men den startes vha. et pythonscript:
/usr/bin/dropbox
Jeg har prøvet at angive den fulde sti i opvågningsscriptet, men det hjælper heller ikke.
Re: Kørsel af script når computeren vågner fra dvale
Uden at vide noget om dropbox, lader det til at den er bruger specifik, så prøv at kør den fra scriptet som din normale bruger.
su marlar -c "pgrep dropbox && (dropbox stop; dropbox start)"
Re: Kørsel af script når computeren vågner fra dvale
Dropbox daemon stopped.
Starting Dropbox...Done!
Og processen kører da også med en ny pid i forhold til før, men af en eller anden grund kommer der ingen ikon i traybaren.
Jeg var godt klar over at den kørte som root, men jeg brugte følgende:
sudo -u marlar pgrep dropbox && (dropbox stop; dropbox start)
Hvad er forskellen i forhold til su marlar -c ?
Hmmm, er det fordi kun pgrep drobox kører som marlar i ovenstående kommando, og resten efter && er "uden for" sudo?
Re: Kørsel af script når computeren vågner fra dvale
sudo -u marlar whoami && whoami
giver:
marlar
root
Altså kun første del som kører under sudo!
Nå, tilbage er så bare hvorfor der ikke er nogen ikon til dropbox....?
Re: Kørsel af script når computeren vågner fra dvale
En mulig løsning (og nu er jeg ude i noget gætteri) kunne være at lave en event listener process som du kører fra gnome autostart. Istedet for at starte dropbox fra dit pm-utils hook fyrer du en event efter din event listener som så kører dropbox kommandoen
#!/bin/bash
#event listener process
restart_dropbox(){
pgrep dropbox && (dropbox stop; dropbox start)
}
trap restart_dropbox SIGINT
while true; do
sleep 1
done
trap reagerer nu på SIGINT signalet som du sender med kill, så dit pm-utils hook skal se således ud
kill -SIGINT `pgrep restart_db_event_listener`
Re: Kørsel af script når computeren vågner fra dvale
Men når signalet kommer fra pm-utils, så går dropbox i en form for limbo, hvor ikonet er der uden det lille hak der signalerer at sync er uptodate. Samtidig kan jeg ikke stoppe dropbox, den siger "Dropbox isn't running!", men hvis jeg så prøver at starte den, siger den "Dropbox is already running!".
Jeg kan dog godt stoppe dropbox ved at højreklikke på ikonet og vælge "Stop Dropbox".
Mystisk!