Score:0

การแจ้งเตือนส่งไม่ทำงานจาก ROOT crontab

ธง pg

สคริปต์นี้ทำงานได้ดีใน crontab ของผู้ใช้ แต่ฉันต้องเรียกใช้จาก ROOT crontab แต่ใช้งานไม่ได้:

#!/bin/sh 
#cron.sh
# แจ้งเตือนผู้ใช้ของวันที่และเวลา
แหล่งที่มา /home/user/.bashrc
pid=$(pgrep -u ผู้ใช้ openbox | หัว -n 1)
dbus=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$pid/environ | sed 's/DBUS_SESSION_BUS_ADDRESS=//' )
ส่งออก DBUS_SESSION_BUS_ADDRESS=$dbus
ส่งออก HOME=/บ้าน/ผู้ใช้
ส่งออก DISPLAY=:0
/usr/bin/notify-send 'title' "$(/bin/date)"

พบสคริปต์ที่นี่: สคริปต์ crontab

สคริปต์ถูกวางไว้บน /home/user/cron.sh โดยมีสิทธิ์ทั้งหมด (777) crontab รูทของฉันคือ:

* * * * * /home/user/cron.sh

ถ้าฉันใช้สคริปต์นี้ใน crontab ผู้ใช้ปกติ มันใช้งานได้และแสดงข้อความป๊อปอัป แต่ไม่ใช่จาก root crontab ระบบล็อก (/var/log/syslog ) ไม่แสดงข้อผิดพลาดเมื่อทริกเกอร์ crontab

Artur Meinild avatar
vn flag
โปรดอธิบายรายละเอียดเกี่ยวกับสิ่งต่างๆ ต่อไปนี้ 1) สิ่งใดไม่ทำงาน สคริปต์ไม่ทำงานเลยใช่หรือไม่ 2) ตำแหน่งและการอนุญาตของไฟล์สคริปต์คืออะไร 3) บรรทัด crontab ที่ใช้ในการเรียกใช้สคริปต์คืออะไร โดยทั่วไปแล้ว ให้ข้อมูลมากที่สุดเท่าที่จะเป็นไปได้ มิฉะนั้นจะช่วยได้ยากจริงๆ
Artur Meinild avatar
vn flag
เป็นไปได้ไหมว่าเมื่อรันจากรูท ผู้ใช้รูทจะได้รับการแจ้งเตือน ไม่ใช่ผู้ใช้รายอื่นของคุณ คุณสามารถเพิ่มบรรทัดนี้เพื่อตรวจสอบว่าสคริปต์ทำงานจริง: `touch /home/user/script-has-run` หากมีไฟล์ `/home/user/script-has-run` อยู่ แสดงว่าสคริปต์ทำงานแล้ว
hr flag
AFAIK `source` เป็นเรื่องไร้สาระ - ใน POSIX /bin/sh คุณควรใช้ ` /home/user/.bashrc` แต่จริงๆแล้วคุณไม่ควรจัดหา `.bashrc` ลงในเชลล์ `sh` - หากคุณต้องการคุณสมบัติจาก `.bashrc` ของผู้ใช้ ให้เปลี่ยน shebang เป็น `#!/bin/ ทุบตี `
Score:1
ธง vn

ฉันค่อนข้างแน่ใจ แจ้ง-ส่ง จะต้องเรียกใช้ในฐานะผู้ใช้ที่ควรได้รับการแจ้งเตือน ลองแทนที่บรรทัดสุดท้ายด้วยสิ่งนี้:

su user -c '/usr/bin/notify-send "title" "$(/bin/date)"'

เดอะ su ผู้ใช้ -c คำสั่งเปลี่ยนผู้ใช้เป็น ผู้ใช้ และ -ค ส่งคำสั่งต่อไปนี้ไปยังเชลล์

คำสั่งนี้ควรเปลี่ยนเป็นผู้ใช้ที่ถูกต้องและรันคำสั่ง

หากคุณต้องการเรียกใช้สคริปต์ทั้งหมดในฐานะผู้ใช้รายอื่น ลองดูที่ คำถาม & คำตอบนี้จาก Stack Overflow.

hr flag
ฉันไม่คิดว่า `su` ส่งผ่านอาร์กิวเมนต์ต่อท้ายไปยังคำสั่ง `-c` ใช่ไหม บางทีนั่นอาจจะต้องเป็น `su user -c '/usr/bin/notify-send "title" "$(/bin/date)"'' ไม่ว่าคุณจะเรียกใช้ `notify-send` เป็น `user` ก็ควรที่จะเรียกใช้ทั้งหมดจาก crontab ของ `user` ...
Artur Meinild avatar
vn flag
ฉันเชื่อว่าคุณพูดถูก อย่างไรก็ตาม ฉันไม่สามารถเข้าใจกรณีการใช้งานของ OP ได้จริงๆ แต่ได้พยายามช่วยเหลือจากสิ่งที่ฉันสามารถหาได้จากที่อื่น

โพสต์คำตอบ

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