以具有 root 權限的使用者身份執行腳本
由於掛載的驅動器上的權限衝突且不斷變化(由於程序的開發結構而無法輕易解決),因此必須使用root權限執行腳本。
這可以完成
sudo /usr/serverm1/lsintd
並提供良好的結果。但是,我們希望在啟動時自動執行此腳本。由於權限不足,在啟動時在我們的主使用者下執行腳本會導致核心轉儲。因此,我們認為我們可以在 crontab 中將其設置為
@reboot /usr/serverm1/lsintd
(如此處所建議的,但是這會使用 root 的設置和配置執行它(這是不存在的)。TLDR:我們如何才能像在啟動時使用命令一樣執行腳本
sudo /usr/serverm1/lsintd
?我也嘗試應用
chmod u+x
到二進製文件,但是這仍然會導致核心轉儲,就像使用正常權限執行一樣(想法來自讓使用者執行具有 root 權限的腳本)。旁注:我承認這在某種程度上是一個 XY 問題,但是由於我們伺服器上一些其他服務的開發結構緩慢且組織不善,我們無法解決根本問題,必須解決這個問題。
一種方法是創建一個 systemd 單元。
您可以在此處找到所有可能的選項:www.freedesktop.org/…/systemd.unit.html 但我將展示一個簡單的範例:
1.讓我們創建一個bash腳本,它將每次系統啟動的日期和時間寫入文件:
/root/file
只有
root
使用者有權在/root
目錄中寫入和編輯文件。我將使用者切換到
root
withsudo su -
讓我們創建一個腳本
/root/timelog.sh
並使其可執行chmod +x /root/timelog.sh
#!/bin/bash if ! [ /root/file ]; then touch /root/file; fi echo $(date) >> /root/file
2.現在我們需要
System Unit
文件:/etc/systemd/system/timelog.service
[Unit] Description=timelog.service [Service] Type=oneshot ExecStart=/root/timelog.sh [Install] WantedBy=multi-user.target
3.最後一項任務是確保它將與系統一起啟動:
systemctl enable timelog