2 votes

Firefox 94, lorsqu'il est exécuté à partir d'une crontab, déclare "est déjà en cours d'exécution, mais ne répond pas".

Je comprends qu'il y ait ou puisse y avoir des questions similaires ici, mais celle-ci ne concerne pas firejail Firefox n'a pas non plus de retard au démarrage.

Info OS :

Xubuntu 20.04
DISTRIB_DESCRIPTION="Ubuntu 20.04.3 LTS"
NAME="Ubuntu"
VERSION="20.04.3 LTS (Focal Fossa)"
VERSION_ID="20.04"
$ uname -a
Linux terrance-ubuntu 5.11.0-40-generic #44~20.04.2-Ubuntu SMP Tue Oct 26 18:07:44 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

enter image description here

Je lance un script à partir d'un crontab qui lancera ma page de connexion ADP et me fera entrer et sortir à des moments précis de la journée. Cela fonctionnait parfaitement jusqu'à la sortie de Firefox 94. Je comprends maintenant que Mozilla a décidé, pour des raisons de distance, de ne plus utiliser X11 mais D-Bus. Je n'arrive pas à comprendre ce que signifie l'utilisation de D-Bus au lieu de X11, si ce n'est qu'ils prétendent que c'est plus simple à utiliser. Je suppose que cela peut être dû à Wayland que je n'utilise pas.

Si j'exécute le script suivant à partir d'un terminal de ligne de commande aux moments précis, cela fonctionne parfaitement, mais si j'exécute le script à partir du terminal de ligne de commande crontab Je reçois le message suivant :

enter image description here

Le script ( encore un travail en cours ) :

#!/bin/bash

#This function checks the path of the app on a Mac.
realpath1() {
        [[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"
}

#This function matches the day of the week and returns 0 if match, 1 if weekend.
function dowcheck(){
case " ${daysofweek[@]} " in
    *\ ${DOW}\ *)
        return 0;;
    *)
        return 1;;
esac
}

#This function matches if the clock in or out time is a match with 0 or 1 if not.
function timecheck(){
case " ${timesofday[@]} " in
    *\ ${HM}\ *)
        return 0;;
    *)
        return 1;;
esac
}

#This function matches days off to today.  If a match return 0 meaning day off, 1 means not a day off.
function daysoffcheck(){
case " ${daysoff[@]} " in
    *\ ${daymdy}\ *)
        return 0;;
    *)
        return 1;;
esac
}

#Check the OS type.
OS_TYPE=$(uname -a | awk '{print $1}')
if [[ ${OS_TYPE} == "Linux" ]]; then
        OS=$(grep -i ^name= /etc/*release | awk -F= '{print $2}' | sed 's/\"//g')
else
        OS=$(system_profiler SPSoftwareDataType | awk '/System Version:/ {print $3}')
fi
if [ "${OS}" = "CentOS Linux" ]; then
        OS=Fedora
fi

#Set working directories and set Display for running in a CRONJOB.
case $OS in
        macOS) apppath=/Applications/Firefox.app/Contents/MacOS
        export DISPLAY="/private/tmp/com.apple.launchd.*/org.macosforge.xquartz:0"
                PWD=$(dirname $(realpath1 $(which $0)));;
        *) apppath=/usr/bin
        DM=$(/usr/bin/basename $(/bin/cat /etc/X11/default-display-manager))
        case $DM in
            lightdm)
                export DISPLAY=:0;;
            gdm3)
                grep -E "# AutomaticLogin|AutomaticLoginEnable = false" /etc/$DM/*.conf >/dev/null && export DISPLAY=:1 || export DISPLAY=:0;;
            *);;
        esac
                PWD=$(dirname $(realpath $(which $0)));;
esac

#Set variables for matching functions.
DOW=$(date +%a)
HM=$(date +%H:%M)
daymdy=$(date +%m-%d-%Y)
#If today is newer than day off remove last day off.
if [[ "${daymdy}" > "$(head -1 $PWD/daysoff.txt)" ]]; then
    sed -i '1d' $PWD/daysoff.txt
fi

#Declare arrays.
declare -a daysofweek=('Mon' 'Tue' 'Wed' 'Thu' 'Fri')
declare -a timesofday=('08:00' '12:00' '12:30' '16:30')
declare -a inout=('in' 'out for lunch' 'in from lunch' 'out for the day')
declare -a daysoff=($(cat $PWD/daysoff.txt))

#Get in or out.
for i in "${!timesofday[@]}"; do
    if [[ "${timesofday[$i]}" == "${HM}" ]]; then
        inorout="${inout[$i]}";
    fi;
done

#Run functions and return 0 or 1.
daysoffcheck
doff=$?
dowcheck
dow=$?
timecheck
time=$?

#Finish up and send information or launch Firefox if need be.
if [[ $doff != "1" ]]; then
        echo "Today is a day off!  Why are you trying to clock in?"
        exit 1
elif [[ $dow != "0" ]]; then
        echo "It's the weekend!  Why are you trying to clock in?"
        exit 1
elif [[ $time != "0" ]]; then
        echo "It is $DOW at $HM.  It is not time to clock in or out."
        exit 1
else
        echo "It's ${HM}. Time to clock ${inorout}." | mail -s "Time clock" mynumber@tmomail.net
        echo "It's ${HM}. Time to clock ${inorout}." | mail -s "Time clock" myemail@gmail.com 
        xdotool mousemove --sync 677 1011
        $apppath/firefox --new-tab https://workforcenow.adp.com/workforcenow/login.html &
        $PWD/clock_in_out.bsh
        wait
fi

Si quelqu'un a une idée pour faire fonctionner Firefox avec D-Bus comme il l'était avec X11 avant la version 94, je l'apprécierais grandement !

6voto

raj Points 6225

Votre crontab script doit avoir la variable d'environnement DBUS_SESSION_BUS_ADDRESS correctement défini, c'est-à-dire à la même valeur que celle utilisée dans votre session de bureau. Moi-même j'utilise cette méthode pour un crontab script qui utilise notify-send pour afficher les notifications à l'écran. Cette valeur est généralement statique par utilisateur, c'est-à-dire qu'elle ne change pas entre les sessions, ne dépend que de l'ID de l'utilisateur, donc vous pouvez simplement la copier de votre session de bureau à votre script. Ou pour être toujours sûr d'utiliser la bonne valeur, vous pouvez mettre un script dans vos programmes de démarrage de session, qui écrit cette valeur dans un fichier temporaire, et votre crontab script la lit depuis ce fichier.

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