Làm thế nào để chạy daemon Dropbox trong nền?


38

Tôi đang sử dụng Debian 6 và Dropbox. Tôi đã làm theo các lệnh này để cài đặt nó.

Khi tôi chạy ~/.dropbox-dist/dropboxd- Dropbox hoạt động và công cụ. Vấn đề là khi tôi đóng thiết bị đầu cuối hoặc thậm chí tệ hơn - khởi động lại, Dropbox ngừng hoạt động và tôi cần chạy lại trình nền đó.

Làm thế nào tôi có thể để máy tính tự động khởi động trình nền đó trong nền?


Bạn đã thử tập lệnh python được liên kết dưới đây trên cùng một trang web chưa? Nó dường như được nhắm mục tiêu để kiểm soát daemon. (Tôi không có quyền truy cập vào máy ATM dựa trên debian để tự mình thử).
WhyNotHugo

Câu trả lời:


51

Nếu bạn đang chạy daemon từ tài khoản của chính mình, hãy khởi động nó vào lúc khởi động với Cron . Chạy crontab -eđể chỉnh sửa tệp crontab của bạn và thêm dòng

@reboot ~/.dropbox-dist/dropboxd

Trong khi điều này sẽ hoạt động, lý tưởng nhất là tạo tập lệnh dịch vụ trong khi /etc/init.d/sử dụng tập lệnh bộ xương được chứa trong đó. Sau đó, bạn có thể thêm service dropbox startcron khi khởi động lại và vẫn có khả năng dừng dịch vụ và khởi động lại nó.
sparticvs

@sparticvs - Dropbox sẽ không chạy bằng root nếu bạn đặt nó trong init.d? Dropbox có thể được cấu hình để chạy trên mỗi cơ sở người dùng. Dropboxd có thể được chia sẻ giữa những người dùng sử dụng các tài khoản dropbox khác nhau không?
Chúa ơi.

@LordLoh. điểm tốt. Tuy nhiên, bạn có thể thay đổi thành người bạn muốn chạy. Tôi đã tìm thấy tài nguyên này . Có vẻ mới.
sparticvs

1
@LordLoh. @sparticvs Tôi nghĩ rằng có một giải pháp cho init.dvấn đề chạy như root. Tôi đã đăng một câu trả lời của riêng tôi, nhưng giải pháp tại pixeldust.wikidot.com/linode-setup%3adropbox dường như hoạt động tốt.
Zac

13

chạy lệnh theo cách này:

($HOME/.dropbox-dist/dropboxd &)&

điều này sẽ tách quá trình từ thiết bị đầu cuối thực tế và đặt nó trong nền thực.

Bạn vẫn sẽ phải khởi động lại nó bằng tay sau khi khởi động lại.


11

Đây là giải pháp của tôi. Đây là trên Debian 8.

Cài đặt Dropbox theo hướng dẫn tiêu chuẩn. Cho đến nay, tôi chỉ có một người dùng được kết nối, tôi không biết liệu điều này có hoạt động với nhiều người dùng hay không vì dường như dropbox đăng ký máy chứ không phải tài khoản người dùng linux. Nếu bạn biết cách để có nhiều tài khoản người dùng trên một máy chủ hoạt động, hãy cho chúng tôi biết.

https://www.dropbox.com/en_GB/install?os=lnx

Sau đó cài đặt các hướng dẫn kịch bản điều khiển python nhưng đặt nó vào / usr / bin chứ không phải bin thư mục chính của bạn.

Tạo tập tin /lib/systemd/system/dropbox@.service:

[Unit]
Description=Dropbox as a system service user %i

[Service]
Type=forking
ExecStart=/usr/bin/dropbox start
ExecStop=/usr/bin/dropbox stop
User=%i
Group=%i
# 'LANG' might be unnecessary, since systemd already sets the
# locale for all services according to "/etc/locale.conf".
# Run `systemctl show-environment` to make sure.
Environment=LANG=en_US.utf-8

[Install]
WantedBy=multi-user.target

Kích hoạt dịch vụ cho người dùng fred:

$ sudo systemctl enable dropbox@fred.service

Sau đó bắt đầu dịch vụ:

$ sudo systemctl start dropbox@fred.service

Tôi thích câu trả lời của bạn, chỉ cần một vài điều tôi thay đổi. Tôi sẽ thêm vào After=network.targetdưới [Unit]và đặt tệp python vào /usr/local/binmỗi unix.stackexchange.com/questions/8656/ mẹo
meffect

5

Bạn cũng có thể chạy như một daemon bằng cách làm daemon $HOME/.dropbox-dist/dropboxd.

Điều này có lợi thế là nếu bạn thêm -n/--namecờ, bạn có thể sử dụng daemon --[running|restart|stop] -n <name>để kiểm soát quá trình.

Có lẽ ai đó khác có thể hiểu được cách tốt nhất để có được daemon bắt đầu sử dụng daemonđể chạy khi khởi động ...



3

Có một cái nhìn ở đây:

https://community.spiceworks.com/topic/131973-dropbox-headless-workstation?page=1#entry-6076539

Một người dùng đã đề cập:

Chỉ cần nghĩ rằng tôi đã đề cập:

(a) các bản phân phối mới nhất dường như tạo ra điều này khá đơn giản, chỉ cần chạy dropbox starttừ dòng lệnh, NHƯNG (b) coi chừng đăng nhập và đăng xuất với X11 được chuyển tiếp.

Tôi đã thiết lập rất nhiều bí danh Bash để kết nối với nhiều máy khác nhau và tất cả chúng đều bao gồm -Xtùy chọn để chuyển tiếp các gói X11. Bởi vì điều này, Dropbox tiếp tục chết khi tôi đăng xuất, thậm chí chạy nó theo screenvà với nohup. Rõ ràng, việc chuyển tiếp X11 đã khiến Dropbox kết nối quy trình dbus trên máy cục bộ của tôi chứ không phải trên máy từ xa; Vì vậy, khi tôi phá vỡ kết nối, Dropbox đã thấy dbus bị chấm dứt và do đó tự chấm dứt.

Chỉ cần FYI, vì điều này làm tôi bối rối một chút. Điều quan trọng là tôi đã phải nhấn Ctrl- Cngay cả sau khi đăng xuất / chạy exit trên máy từ xa. Rõ ràng, SSH đã giữ phiên mở, mặc dù tôi đã thoát Bash, vì kết nối mở còn lại.

Giải pháp rất đơn giản ngay cả khi một người (vì một lý do nào đó) muốn tiếp tục ssh-ing với -X: trước khi khởi chạy Dropbox, bạn nên "phá vỡ" việc chuyển tiếp, ví dụ như:

$ unset DISPLAY

Nếu điều này được thực hiện trong tập lệnh Bash, việc chuyển tiếp bị "hỏng" ngay bên trong tập lệnh nhưng một khi điều này được thực thi thì 'terminal' vẫn đang chuyển tiếp.


3

Đây là giải pháp của tôi cho các bản phân phối Linux sử dụng Upstart 1.4 trở lên.

Lưu nội dung bên dưới vào tệp cấu hình bên dưới /etc/init, ví dụ /etc/init/db_user.conf::

# Dropbox upstart script for user db_user, db_user can be replaced by anything you like.

description "Dropbox db_user"
author "myth384"

start on runlevel [2345]
stop on runlevel [!2345]

respawn

setuid db_user
# The next two lines are optional. I use these to be able to share the 
#   Dropbox using Samba. Within group shareusers are all Samba users.
# setgid shareusers
# umask 0002

# The next line is necessary to be able to synchronise files with non-ASCII characters.

env LANG="en_US.UTF-8"     
exec /home/db_user/.dropbox-dist/dropbox

Để khởi động trình nền mà không cần khởi động lại:

sudo start db_user

LƯU Ý: Bằng cách bỏ ghi chú dòng setgid, không cần thiết phải đặt cờ setgid trên .dropbox.cachethư mục như được chỉ định bởi các nguồn khác trên internet.


2

Bạn có thể sử dụng screen:

screen -dmS ~/.dropbox-dist/dropboxd

Điều này sẽ bắt đầu nó như một daemon và trong chế độ tách ra.

Sau đó, bạn sẽ phải viết tập lệnh init.d của riêng mình để nó chạy như dịch vụ theo cách này và thêm một dòng sau #!/bin/bashcho chkconfigvà thêm các mức chạy cần thiết, chẳng hạn như 2, 3, 4, 5. Các bản phân phối khác nhau có các mức chạy khác nhau bạn phải kiểm tra cái này


1

Có một cách khá hay để thêm phần này vào init.dmô tả ở đây . Bạn phải thêm người dùng nào bạn muốn Dropbox bắt đầu với tập lệnh init (đủ dễ) và khi hệ thống khởi động, nó sẽ khởi động trình nền Dropbox cho mỗi người dùng đó.

Điều duy nhất cần lưu ý là họ chỉ định DAEMON=.dropbox-dist/dropboxnhững gì tôi tin là không chính xác. Tác giả đã quên dở cuối của điều đó - nó nên được DAEMON=.dropbox-dist/dropboxd.


1

Nó có thể không hữu ích cho tất cả các bản phân phối Linux, nhưng trong CentOS 7, từ menu Ứng dụng / Công cụ hệ thống / menu, hãy mở ' Ứng dụng khởi động '. Sau đó bấm vào Thêm và nhập lệnh này:

/home/username/.dropbox-dist/dropboxd

hoặc là

/home/.dropbox-dist/dropboxd

nhập mô tả hình ảnh ở đây


@roaima cảm ơn sự phán xét của bạn. Giải pháp nào khác? Tôi chỉ đăng các giải pháp làm việc cho tôi.
Aryo Z

0

Tôi đã thêm các dòng sau vào cuối tệp .profile của mình. Tôi thích có máy tính khởi động tại thiết bị đầu cuối. Tuy nhiên, nếu tôi khởi động X11 sau đó, applet dropbox không được hiển thị trên khay hệ thống.

dropbox running
rv=$?
if [ $rv -eq 0 ]; then
    dropbox start;
fi

Giả sử bạn thực sự có ý nghĩa [ $rv -eq 0](và không [ $rv -ne 0 ]), bạn có thể đơn giản hóa tất cả những điều đó vớidropbox running && dropbox start
roaima



-1

Giải pháp là như các chương trình python khác:

shell$ nohup ~/.dropbox-dist/dropboxd & 

-2

Tôi nghĩ cách tốt nhất là tạo một tệp mới trong / usr / bin với mã này:

#!/bin/bash

~/.dropbox-dist/dropboxd

lưu và đặt tên là "dropbox". Bây giờ bạn có thể chạy từ bảng điều khiển trong nền hoặc tạo lối tắt trong menu / máy tính để bàn của bạn


2
Điều này là không chính xác vì nó sẽ chỉ chạy ở nền trước. Bạn sẽ vẫn phải làm dropbox &để gửi nó đến nền. Ngoài ra, nếu kết nối đầu cuối kết thúc, tín hiệu Hangup sẽ giết quá trình.
sparticvs
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.