Tôi nghĩ rằng cả hai -c
tham số ( su
và bash
) sẽ phải được trích dẫn ở mức tối thiểu.
su - username -c "/usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'"
Cũng -
dự kiến là cuối cùng và có thể không được mong muốn ở đây (xem man su
).
Một vài nhận xét nữa. sudo
có thể là lựa chọn tốt hơn cho lệnh one-shot như của bạn, nhưng không nhất thiết là:
sudo -iu username /usr/bin/screen -dmS test bash -c '/var/www/path/to/script/script.sh; exec bash'
Cụ thể, bạn có thể sử dụng một mức độ trích dẫn ít hơn với sudo
.
Một điều bạn muốn cẩn thận là thực thi các lệnh mà không có đường dẫn tuyệt đối trong ngữ cảnh đặc quyền. Điều này giữ cho su
(hoặc sudo
) nhưng cũng cho đường dẫn đến bash
trong lệnh của bạn. Bạn đang làm điều đó đúng với screen
.
Chỉ cần thử nghiệm sau đây và nó hoạt động độc đáo. Tôi nghĩ -
vấn đề chính trong dòng ban đầu của bạn:
/bin/su username -c "/usr/bin/screen -dmS test bash -c '/home/username/test.sh; exec bash'"
Nhận xét ác: tại sao bạn không tmux
thử? Gần đây tôi đã chuyển đổi và không bao giờ nhìn lại. Điều duy nhất tôi cần thay đổi ngay lập tức là tổ hợp phím tiền tố tmux
mặc định là Ctrl+ B- trở lại + screen
của GNU .CtrlA
Nó cho phép chia cửa sổ của bạn thành một số lượng gần như tùy ý (theo chiều dọc và chiều ngang) và định dạng tệp cấu hình của nó (bao gồm cả định dạng cho mệnh giá) thực sự dễ hiểu đối với con người. Tất nhiên tmux
là tốt như screen
khi bạn chỉ muốn chạy một số chương trình / tập lệnh ban đầu không được viết dưới dạng daemon trong nền. Tuy nhiên, nếu bạn có ý định tương tác với bộ ghép kênh đầu cuối, tôi nhiệt liệt khuyên bạn nên tmux
.
su
haysudo
?