Score:2

Firefox 94 เมื่อเรียกใช้จาก crontab อ้างว่า "กำลังทำงานอยู่แล้ว แต่ไม่ตอบสนอง"

ธง id

ฉันเข้าใจว่ามีหรืออาจมีคำถามที่คล้ายกันที่นี่ แต่คำถามนี้ไม่เกี่ยวข้อง คุกไฟ และ Firefox ก็ไม่มีความล่าช้าเมื่อเริ่มต้น

ข้อมูลระบบปฏิบัติการ:

ซูบุนตู 20.04
DISTRIB_DESCRIPTION="อูบุนตู 20.04.3 LTS"
NAME="อูบุนตู"
VERSION="20.04.3 LTS (โฟกัสแอ่ง)"
VERSION_ID="20.04"
$ uname -a
Linux terrance-ubuntu 5.11.0-40-generic #44~20.04.2-Ubuntu SMP อ. 26 ต.ค. 18:07:44 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

ป้อนคำอธิบายรูปภาพที่นี่

ฉันเรียกใช้สคริปต์จากไฟล์ crontab ที่จะเปิดหน้าเข้าสู่ระบบ ADP ของฉันและนาฬิกาฉันเข้าและออกในเวลาที่กำหนดของวัน สิ่งนี้เคยทำงานได้อย่างไร้ที่ติจนกระทั่ง Firefox 94 เปิดตัว ตอนนี้ฉันเข้าใจว่าสำหรับ Mozilla ระยะไกลตัดสินใจที่จะไม่ใช้ X11 อีกต่อไป แต่ใช้ D-Bus แทน สำหรับชีวิตของฉัน ฉันไม่สามารถเข้าใจความหมายของการใช้ D-Bus แทน X11 นอกจากพวกเขาอ้างว่ามันใช้ง่ายกว่า ฉันสันนิษฐานว่าอาจเป็นเพราะ Wayland ที่ฉันไม่ได้ใช้

ถ้าฉันเรียกใช้สคริปต์ต่อไปนี้จากเทอร์มินัลบรรทัดคำสั่งตามเวลาที่กำหนด มันจะทำงานได้อย่างสมบูรณ์ แต่ถ้าฉันเรียกใช้สคริปต์จาก crontab ฉันได้รับข้อความต่อไปนี้:

ป้อนคำอธิบายรูปภาพที่นี่

สคริปต์ (ยังคงเป็นงานที่อยู่ระหว่างดำเนินการ):

#!/bin/bash

#ฟังก์ชันนี้ตรวจสอบเส้นทางของแอปบน Mac
เส้นทางจริง 1() {
        [[ $1 = /* ]] && echo "$1" || เสียงสะท้อน "$PWD/${1#./}"
}

#ฟังก์ชันนี้จะจับคู่วันในสัปดาห์และส่งคืน 0 หากตรงกัน 1 หากตรงกับวันหยุดสุดสัปดาห์
ฟังก์ชัน dowcheck(){
กรณี " ${daysofweek[@]} " ใน
    *\ ${DOW}\ *)
        กลับ 0;;
    *)
        กลับ 1;;
เอสแซค
}

#ฟังก์ชันนี้จะจับคู่ว่าเวลาเข้าหรือออกของนาฬิกาตรงกับ 0 หรือ 1 ถ้าไม่ตรงกัน
การตรวจสอบเวลาของฟังก์ชัน (){
กรณี " ${timesofday[@]} " ใน
    *\ ${HM}\ *)
        กลับ 0;;
    *)
        กลับ 1;;
เอสแซค
}

#ฟังก์ชันนี้ตรงกับวันหยุดถึงวันนี้ หากการแข่งขันกลับ 0 หมายถึงวันหยุด 1 หมายถึงไม่มีวันหยุด
ฟังก์ชันตรวจสอบวันปิดทำการ (){
กรณี " ${daysoff[@]} " ใน
    *\ ${daymdy}\ *)
        กลับ 0;;
    *)
        กลับ 1;;
เอสแซค
}

#ตรวจสอบประเภทระบบปฏิบัติการ
OS_TYPE=$(uname -a | awk '{พิมพ์ $1}')
ถ้า [[ ${OS_TYPE} == "Linux" ]]; แล้ว
        OS=$(grep -i ^name= /etc/*release | awk -F= '{print $2}' | sed 's/\"//g')
อื่น
        OS=$(system_profiler SPSoftwareDataType | awk '/เวอร์ชันระบบ:/ {พิมพ์ $3}')
ไฟ
ถ้า [ "${OS}" = "CentOS Linux" ]; แล้ว
        OS=เฟดอร่า
ไฟ

#ตั้งค่าไดเรกทอรีการทำงานและตั้งค่าการแสดงผลสำหรับการทำงานใน CRONJOB
กรณี $OS ใน
        macOS) apppath=/Applications/Firefox.app/Contents/MacOS
        ส่งออก DISPLAY="/private/tmp/com.apple.launchd.*/org.macosforge.xquartz:0"
                PWD=$(นามสกุล $(realpath1 $(ซึ่ง $0)));;
        *) apppath=/usr/bin
        DM=$(/usr/bin/ชื่อฐาน $(/bin/cat /etc/X11/default-display-manager))
        กรณี $DM ใน
            ไลท์ดีเอ็ม)
                ส่งออก DISPLAY=:0;;
            gdm3)
                grep -E "# AutomaticLogin|AutomaticLoginEnable = false" /etc/$DM/*.conf >/dev/null && ส่งออก DISPLAY=:1 || ส่งออก DISPLAY=:0;;
            *);;
        เอสแซค
                PWD=$(นามสกุล $(realpath $(ซึ่ง $0)));;
เอสแซค

#ตั้งค่าตัวแปรสำหรับฟังก์ชันที่ตรงกัน
DOW=$(วันที่ +%a)
HM=$(วันที่ +%H:%M)
daymdy=$(วันที่ +%m-%d-%Y)
#หากวันนี้ใหม่กว่าวันหยุด ให้ลบวันหยุดวันสุดท้าย
ถ้า [[ "${daymdy}" > "$(หัว -1 $PWD/daysoff.txt)" ]]; แล้ว
    sed -i '1d' $PWD/daysoff.txt
ไฟ

#ประกาศอาร์เรย์
ประกาศ -a daysofweek=('จันทร์' 'อังคาร' 'พุธ' 'พฤหัส' 'ศุกร์')
ประกาศ -a timesofday=('08:00' '12:00' '12:30' '16:30')
ประกาศ -a inout=('เข้า' 'ออกไปทานอาหารกลางวัน' 'เข้าจากมื้อเที่ยง' 'ออกไปวันนี้')
ประกาศ -a วันหยุด=($(cat $PWD/daysoff.txt))

#เข้าหรือออก.
สำหรับฉันใน "${!timesofday[@]}"; ทำ
    ถ้า [[ "${timesofday[$i]}" == "${HM}" ]]; แล้ว
        inorout="${inout[$i]}";
    ไฟ;
เสร็จแล้ว

#เรียกใช้ฟังก์ชันและส่งกลับ 0 หรือ 1
ตรวจสอบวันหยุด
อ๊อฟ=$?
เช็คดาว์น
ดาวโจนส์=$?
ตรวจสอบเวลา
เวลา=$?

#เสร็จสิ้นและส่งข้อมูลหรือเปิด Firefox หากจำเป็น
ถ้า [[ $doff != "1" ]]; แล้ว
        echo "วันนี้วันหยุด! ทำไมคุณพยายามตอกบัตร"
        ทางออก 1
elif [[ $dow != "0" ]]; แล้ว
        echo "วันหยุดสุดสัปดาห์! ทำไมคุณพยายามตอกบัตร"
        ทางออก 1
elif [[ $time != "0" ]]; แล้ว
        echo "เป็น $DOW ที่ $HM ยังไม่ถึงเวลาตอกบัตรเข้าหรือออก"
        ทางออก 1
อื่น
        echo "นี่คือ ${HM} ได้เวลานาฬิกา ${inorout}" | เมล -s "นาฬิกาเวลา" [email protected]
        echo "นี่คือ ${HM} ได้เวลานาฬิกา ${inorout}" | เมล -s "นาฬิกาเวลา" [email protected] 
        xdotool mousemove --sync 677 1011
        $apppath/firefox --แท็บใหม่ https://workforcenow.adp.com/workforcenow/login.html &
        $PWD/clock_in_out.bsh
        รอ
ไฟ

ถ้าใครมีความคิดใด ๆ ที่ฉันสามารถทำให้ Firefox ทำงานกับ D-Bus ได้เหมือนกับ X11 ก่อนเวอร์ชัน 94 ฉันจะขอบคุณมาก!

Terrance avatar
id flag
ป.ล. มันจะทำงานได้ดีกับ Waterfox แต่มีปัญหาในการรีเฟรชหน้าด้วย Waterfox ซึ่งทำให้ฉันรำคาญ :)
raj avatar
cn flag
raj
คุณอาจต้องส่งค่าที่ถูกต้องของตัวแปรสภาพแวดล้อม `DBUS_SESSION_BUS_ADDRESS` จากเซสชันเดสก์ท็อปของคุณไปยังสคริปต์ crontab ฉันทำเพื่อสคริปต์ crontab ที่ใช้ `notify-send` เพื่อแสดงการแจ้งเตือนบนหน้าจอ (สิ่งเหล่านี้ใช้ D-Bus ด้วย) ฉันมีสคริปต์ในโปรแกรมเริ่มต้นเซสชัน GNOME ที่เขียนค่าของตัวแปรนี้ไปยังไฟล์ชั่วคราวเมื่อเข้าสู่ระบบ และสคริปต์ crontab อ่านจากไฟล์นี้
Terrance avatar
id flag
@raj ใช่แล้ว! ฉันทำ `printenv` และคว้าบรรทัดของ `DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus` และส่งออกก่อนคำสั่ง `firefox` ในสคริปต์ และตอนนี้มันใช้งานได้ดีมาก! คุณต้องการที่จะเขียนมันเป็นคำตอบ? ขอบคุณอีกครั้ง!
Score:6
ธง cn
raj

สคริปต์ crontab ของคุณต้องมีตัวแปรสภาพแวดล้อม DBUS_SESSION_BUS_ADDRESS ตั้งค่าอย่างถูกต้องกล่าวคือ เป็นค่าเดียวกับที่ใช้ในเซสชันเดสก์ท็อปของคุณ ตัวฉันเองฉันใช้วิธีนี้สำหรับสคริปต์ crontab ที่ใช้ แจ้ง-ส่ง เพื่อแสดงการแจ้งเตือนบนหน้าจอ ค่านี้มักจะคงที่ต่อผู้ใช้ กล่าวคือ มันไม่เปลี่ยนแปลงระหว่างเซสชัน ขึ้นอยู่กับ ID ผู้ใช้เท่านั้น ดังนั้นคุณสามารถคัดลอกจากเซสชันเดสก์ท็อปไปยังสคริปต์ของคุณได้ง่ายๆ หรือเพื่อให้แน่ใจเสมอว่าคุณใช้ค่าที่ถูกต้อง คุณอาจใส่สคริปต์ลงในโปรแกรมเริ่มต้นเซสชัน ซึ่งจะเขียนค่านี้ลงในไฟล์ชั่วคราว และสคริปต์ crontab จะอ่านจากไฟล์นี้

Rob avatar
vn flag
Rob
ใช้ได้ผลสำหรับฉันด้วย ฉันเปลี่ยนคำสั่ง crontab นี้: `32 11 13-20 12 * export DISPLAY=:0 && firefox --new-window "/home/rob/Documents/crontab/Happy-Birthday-Paulette.htm" > /dev/null 2 >&1`. ฉันรัน `printenv` ในเทอร์มินัลและได้สิ่งนี้จากส่วนท้ายของเอาต์พุต: `DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus` ฉันเพิ่มลงในคำสั่ง crontab: `32 11 13-20 12 * ส่งออก DISPLAY=:0 && DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus firefox --new-window "/home/rob/Documents/crontab/Paulette's-Birthday.htm" > /dev/null 2>&1 ` และมันใช้งานได้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา