iT邦幫忙

0

CentOS7 如何設定開機自動執行 shell 時的工作目錄?

系統:CentOS7.9

我寫了一隻 shell script 名稱為 mkdirxxx.sh
放在 /home/user 目錄下
只要執行就會在當前的工作目錄建立一個 xxx 目錄

以 root 為例:
當前的工作目錄為 /home
執行 sh /home/user/mkdirxxx.sh
那麼在 /home 目錄下就會建立一個名為 xxx 目錄

同理, 當前的工作目錄為 /tmp
執行 sh /home/user/mkdirxxx.sh
那麼在 /tmp 目錄下就會建立一個名為 xxx 目錄

接著,我在 /usr/lib/systemd/system 目錄下建立了一個 startmk.service
並且設定好 systemctl enable startmk.service 開機時自動執行 mkdirxxx.sh

這邊問題來了,開機時創建的 xxx 目錄都會建立在主機的根目錄 / 底下,
請問是否有辦法設定每次開機自動執行 mkdirxxx.sh 時的工作目錄,讓 xxx 建立在 /home/user 目錄下?
是要設定 mkdirxxx.sh 還是 startmk.service?

PS:"mkdir /絕對路徑" 不會是我需要的解決辦法,自動建立 xxx 目錄只是我用來說名用的舉例功能,我想請教的是如何設定,才能達到不論當前工作目錄為何,只要執行 mkdirxxx.sh (或執行 systemctl start startmk.service),就只會在設定的目錄下運作並產出結果?

DennisLu iT邦研究生 1 級 ‧ 2020-12-05 08:53:38 檢舉
google 開機自動執行
/etc/rc.d/rc.local
的用法
搭配 su
su -l 想要的user -c 'mkdir testdir'
Wang.W iT邦新手 5 級 ‧ 2020-12-05 15:51:34 檢舉
謝謝你的回答,是我沒有說明清楚,
因為我是用CentOS7.x 已經不推薦使用 /etc/rc.d/rc.local
另外我實際的需求不僅僅是 mkdir ,是否有方式可以設定工作目錄來執行mkdirxxx.sh ?

另外,爬了一些文 cd 命令都無法直接寫在 sh 文件裡使用,
找了一堆文,因資質駑鈍試了半天也都無法成功... orz
https://stackoverflow.com/questions/255414/why-i-cant-change-directories-using-cd
Wang.W iT邦新手 5 級 ‧ 2020-12-05 22:37:37 檢舉
找出問題了
編輯器換行產生的錯誤
# sed -i 's/\r$//' scriptname.sh
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
echochio
iT邦高手 1 級 ‧ 2020-12-05 08:55:48
最佳解答

方法 1 : 先 cd 到每個目錄 再執行 shell 例如 : cd /tmp;sh /home/user/mkdirxxx.sh
去 startmk.service 改成 ==> 'cd /tmp;sh sh /home/user/mkdirxxx.sh'

方法 2 : 改 shell , 先 cd /home/user 再去執行 mkdir

至於有那些 /home 下面的 user 有 mkdirxxx.sh
可以用 find 去做然後 cd 到該 user 目錄去
還是 ls + if test file 都可

Wang.W iT邦新手 5 級 ‧ 2020-12-05 15:44:48 檢舉

不好意思再請教 startmk.service 如何設定執行shell的工作目錄?
你說改成 'cd /tmp;sh sh /home/user/mkdirxxx.sh'
是指把上述這段命令直接加進 startmk.service 文件內嗎?

我找了一些文章,有看到說是用 WorkingDirectory= 來設定
但是依然沒有效果

[Unit]
Description=TEST

[Service]
WorkingDirectory=/tmp
ExecStart=/home/user/mkdirxxx.sh

User=user
Group=user

[Install]
WantedBy=multi-user.target
Wang.W iT邦新手 5 級 ‧ 2020-12-05 22:37:31 檢舉

找出問題了
編輯器換行產生的錯誤

# sed -i 's/\r$//' scriptname.sh

我要發表回答

立即登入回答