Bash

Bash 腳本在 root 中工作,但不在 crontab 中

  • May 5, 2021

我正在嘗試在 Linux 啟動時執行 bash 腳本,但它不起作用。我已經在 crontab 中嘗試了所有這些命令:

@reboot bash /home/user/mysqlamazon.sh
@reboot sh /home/user/mysqlamazon.sh
@reboot /home/user/mysqlamazon.sh
@reboot sleep 60 && /home/user/mysqlamazon.sh

我在 crontab 上有另一個可以完美執行的命令:

@reboot pwsh file.ps1

我也試過這個命令:

@reboot pwsh file.ps1 && sh /home/user/mysqlamazon.sh

這些都不起作用!任何幫助,將不勝感激!

以下是 bash 腳本的內容:

while($true)
do
./transfermysql.sh > file.txt
bcp tablename in file.txt -S ***********.com,**** -U **** -P *********** -d ********* -c
:> file.txt
sleep 60
done

你沒有告訴我們這是如何失敗的,但我猜你沒有看到它被執行。

首先,您的腳本將永遠無法工作,因為while($true)它不是有效的 shell 語法。我假設你想要這樣的東西:

true=1
while(($true)); do ... ; done

更常見的成語是:

while : ; do ... ; done

或(true是命令):

while true; do ... ; done

這很可能是因為您在腳本中使用了相對路徑:

./transfermysql.sh > file.txt

將其替換為完整路徑:

/path/to/transfermysql.sh > /path/to/file.txt

接下來,我還懷疑它bcp不在 cron 的 PATH 中,所以也要使用它的完整路徑:

/path/to/bcp tablename in file.txt -S ***********.com,**** -U **** -P *********** -d ********* -c

最後,我不知道你為什麼想要:> file.txt,因為你的第一個命令無論如何都會覆蓋它的內容,但如果你出於某種原因確實需要它,你也需要在那裡使用完整路徑> /path/to/file.txt

引用自:https://unix.stackexchange.com/questions/648196