crontab ทำงานเป็นผู้ใช้เฉพาะ


20

ฉันต้องเรียกใช้สคริปต์ทุกวัน ควรเรียกใช้สคริปต์ในฐานะผู้ใช้ที่ระบุ (เช่น user1) ที่ไม่เป็นรูท ดังนั้นฉันจึงใส่ไฟล์ cron ที่ / etc / cron.d และใส่ชื่อผู้ใช้ในบรรทัด (คอลัมน์ที่ 2) แต่มันมีข้อผิดพลาดที่บอกว่าไม่พบคำสั่ง ฉันสงสัยว่าสคริปต์ไม่ได้ทำงานเป็นสภาพแวดล้อมของ user1 ฉันพลาดอะไรไปหรือเปล่า?


3
คุณช่วยแสดงรายการ crontab ที่คุณใช้กับเราได้ไหม
user9517

คำตอบ:


34

เฉพาะ/etc/crontabไฟล์ที่อยู่ใน/etc/cron.d/นั้นมีฟิลด์ชื่อผู้ใช้ ในไฟล์นั้นคุณสามารถทำได้:

1 1 * * * username /path/to/your/script.sh

จาก crontab ของรูทsudo crontab -eคุณสามารถใช้:

1 1 * * * su username -c "/path/to/your/script.sh"

หรือคุณสามารถใช้ crontab ที่แท้จริงของผู้ใช้เช่นนี้:

sudo crontab -u username -e

คอลัมน์ที่สองในแฟ้ม crontab ใด ๆ ที่เป็นชั่วโมงที่คุณต้องการงานที่จะวิ่ง คุณหมายถึงฟิลด์ที่หกใช่ไหม


ไฟล์ใน /etc/cron.d จดอาร์กิวเมนต์ผู้ใช้: help.ubuntu.com/community/CronHowto#Advanced_Crontabและทำไมคุณถึงทำ "sudo su" ถ้าคุณเรียกใช้รูท? ไม่ว่าในกรณีใดคุณจะต้องการให้ "su -l" ใช้สภาพแวดล้อมการเข้าสู่ระบบสำหรับผู้ใช้เนื่องจากเป็นไปได้มากที่สุดปัญหา PATH จากคำอธิบายของปัญหา
cjc

ไฟล์ใน /etc/cron.d ไม่ใช่นามสกุลของ / etc / crontab หรือไม่? ในระบบฉันต้องส่งไฟล์ทั้งหมดใน /etc/cron.d โดยระบุชื่อผู้ใช้
user9517

อ่าแน่นอน /etc/cron.d/ไฟล์เป็น/etc/crontabส่วนหนึ่งของ sudoยังไม่มีจุดหมาย ฉันจะลบส่วนนั้น
Ladadadada

2
เกี่ยวกับการใส่ sudo ใน crontab: (a) sudo su...โดยทั่วไปไม่จำเป็น sudo -u <user> <command>มักจะเพียงพอ (b) sudo จะทำให้หายใจไม่ออกในบางระบบหากไม่มีการเชื่อมต่อ TTY (เช่นเมื่อทำงานโดย cron) สามารถแก้ไขได้ในไฟล์ sudoers ของคุณ
tylerl

4

คุณอาจจำเป็นต้องตั้งค่า PATH สำหรับผู้ใช้นั้นหากปฏิบัติการที่คุณใช้อยู่นั้นอยู่ในระดับเสียงพูด / usr / local / bin ในการตั้งค่า PATH ให้ใส่อะไรแบบนี้ไว้หน้า cronjobs:

PATH=/bin:/usr/bin:/usr/local/bin

*/5 * * * * user1 sample_executable

วิธีอื่นคือระบุพา ธ ไปยัง sample_executable ใน cronjob ของคุณอย่างสมบูรณ์ดังนั้น:

*/5 * * * * user1 /path/to/sample_executable

หาก sample_executable อ้างถึงไฟล์ที่ไม่ได้อยู่ใน PATH มาตรฐานคุณควรใช้ตัวเลือกแรก


1

ไดเร็กทอรีทั่วไปสำหรับผู้ใช้ crontabs อยู่ใน / var / spool / cron / crontabs รูปแบบไฟล์เป็นรูปแบบที่ไม่รวมชื่อผู้ใช้ ผู้ใช้ crontabs เป็นเจ้าของโดยผู้ใช้และตั้งชื่อตามผู้ใช้ที่มีโหมด 0600 นี่คือการจัดการที่ดีที่สุดโดยการเขียนไฟล์แท็บของคุณและใช้crontab -u username filenameในการตั้งค่ารายการ cron ใด ๆ ที่คุณต้องการสำหรับผู้ใช้นั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.