Khi chạy tập lệnh bên dưới từ crontab của người dùng cục bộ của tôi, với sudo
trước đó /usr/bin/FreeFileSync
(dòng của tập lệnh cuối cùng), một cửa sổ tiến trình nhỏ sẽ mở trên GUI của tôi và mọi thứ đều ổn. Điều duy nhất là tôi phải nhập mật mã sudo của mình, điều này làm cho nó tương tác và hơi khó sử dụng.
Quyền root là cần thiết để chạy FFS, nếu không, nó phàn nàn về việc không có quyền truy cập vào một số thư mục và tệp được sao lưu.
#!/bin/bash
# define default display and pass it on to any child process
# from within the running shell
DISPLAY=:0.0
export DISPLAY
/usr/bin/FreeFileSync /home/user/bu-1.ffs_batch 2> \
/home/user/bu-1.ffs_log
Khi tôi gọi cùng một tập lệnh từ crontab gốc của mình sudo crontab -e
, FreeFileSync
không bao giờ được chạy vì lỗi sau:
$ cat /home/user/bu-1.ffs_log
16:35:01: Error: Unable to initialize GTK+, is DISPLAY set properly?
Có thể thấy, tôi có export DISPLAY=:0.0
trong tập lệnh và tập tin crontab gốc của tôi được trang bị:
$ sudo crontab -e | head -4
[sudo] password for user:
1 SHELL=/bin/bash
2 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
3 HOME=/
4 MAILTO=root
Ai đó có thể giúp khắc phục lỗi?
EDIT: Có thể việc chạy này từ crontab của root không thành công vì người dùng root
không có phiên mở và do đó không có thiết bị xuất hiện nào để hiển thị?
Tôi có thể tránh được khó khăn đó bằng cách yêu cầu root hiển thị với thiết bị xuất chuẩn của phiên của người dùng hiện tại không? Nó có vẻ là giá trị một shot nếu có thể làm được; Nếu vậy làm thế nào để tôi làm điều đó?
#includedir /etc/sudoers.d
ở đầu/etc/sudoers
tập tin hay tôi có thể đặt nó ở bất cứ đâu trong tập tin đó không?