2016-02-12 58 views
1

我已經構建了一個bash腳本,它在從命令行執行時運行良好,但在作爲批處理作業(使用at)運行時不起作用。首先,我認爲是因爲環境,但在調試時,我認爲我需要創建的數組存在問題。當從命令行運行日誌時,創建它的內容是我期望的,但是在創建任何日誌時運行。任何想法是什麼導致這個問題?Bash at job not running - 數組

與片的碼A短腳本我想它沒有運行低於

#!/bin/bash 

fsol=`date +%Y%m%d` 

for dia 
    in 0 1 2 
do 

    var=$(date -d "$fsol +$dia days" +'%Y-%m-%d') 

    orto=`awk -v j=$var 'BEGIN { FS=","} $2 == j { print $3}' hora-sol.dat` 

    h_orto=${orto:0:2} 
    m_orto=${orto:2:2} 

    a_orto+=($h_orto $m_orto) 

echo "dia $dia" $var $h_orto $m_orto >> log1.txt 

done 

echo ${a_orto[@]} >> log2.txt 

數據在Hora的-sol.dat

32,2016-02-01,0711,1216,1722,10.1885659530428 
33,2016-02-02,0710,1216,1723,10.2235441870822 
34,2016-02-03,0709,1216,1724,10.2589836910036 
35,2016-02-04,0708,1216,1725,10.2948670333624 
36,2016-02-05,0707,1216,1727,10.3311771153741 
37,2016-02-06,0706,1217,1728,10.3678971831004 
38,2016-02-07,0705,1217,1729,10.4050108377139 
39,2016-02-08,0704,1217,1730,10.4425020444393 
40,2016-02-09,0703,1217,1731,10.4803551390436 
41,2016-02-10,0701,1217,1733,10.5185548339287 
42,2016-02-11,0700,1217,1734,10.5570862213108 
43,2016-02-12,0659,1217,1735,10.5959347763989 
44,2016-02-13,0658,1217,1736,10.6350863580571 
45,2016-02-14,0657,1217,1737,10.6745272092687 
46,2016-02-15,0655,1217,1738,10.7142439549499 
47,2016-02-16,0654,1217,1740,10.7542236006922 
48,2016-02-17,0653,1217,1741,10.7944535282585 
49,2016-02-18,0652,1216,1742,10.8349214920733 
50,2016-02-19,0650,1216,1743,10.8756156133281 
51,2016-02-20,0649,1216,1744,10.9165243743526 
52,2016-02-21,0648,1216,1745,10.9576366115941 
53,2016-02-22,0646,1216,1746,10.9989415078031 
54,2016-02-23,0645,1216,1747,11.0404285846154 
55,2016-02-24,0644,1216,1749,11.0820876932144 
56,2016-02-25,0642,1216,1750,11.123909005324 
57,2016-02-26,0641,1215,1751,11.1658830035395 
58,2016-02-27,0639,1215,1752,11.2080004711946 
59,2016-02-28,0638,1215,1753,11.2502524821626 
60,2016-02-29,0636,1215,1754,11.2926303895977 
+1

你能用更小的更孤立的腳本來重現這個嗎? [mcve] –

+0

你打電話給at?很可能你的文本被忽略,並且'sh'試圖運行你的腳本。 – chepner

+0

我運行'at -f ./prova.bash -t 02121427'。當問題解決時,我打算添加到crontab作業 – pacomet

回答

1

手動運行,它產生:

# cat log.txt 
dia 0 2016-02-12 0659 1217 1735 
dia 1 2016-02-13 0658 1217 1736 
dia 2 2016-02-14 0657 1217 1737 
06 
59 
06 
58 
06 
57 

計劃在:

# echo "/tmp/horasol/script.sh" | at now +1 minute 
warning: commands will be executed using /bin/sh 
job 1 at Fri Feb 12 12:11:00 2016 

它產生完全相同的:

# cat log.txt 
dia 0 2016-02-12 0659 1217 1735 
dia 1 2016-02-13 0658 1217 1736 
dia 2 2016-02-14 0657 1217 1737 
06 
59 
06 
58 
06 
57 

注意warninig通知 '在' 用途/ bin/sh的: 警告:命令將被執行的使用/ bin/sh的

告訴我們你是如何得出結論:「當爲批處理作業(與)運行不起作用

告訴我們更多關於你的「磨片n調試「的時刻。

也許我在這裏使用不同的進程在這裏複製你。由於這種差異,它適用於我。

+0

Hi @ hudson-santos當代碼嘗試查找主腳本何時失敗時,此代碼是更大腳本的一部分。 「不起作用」意味着更大的腳本不執行後續命令,簡短的示例不會創建任何日誌。 – pacomet

+0

腳本是以'#!/ bin/bash'開頭的嗎? – pacomet

+0

不,因爲我已經調度它並通常用#!/ bin/bash執行。也許你有權限問題。你有沒有檢查過這些log.txt是否可以在/tmp/log.txt文件中生成?試試>> /tmp/log1.txt和log2.txt相同。這個/ tmp是一個drwxrwxrwt目錄。 :)這意味着每個人都可以在那裏編寫自己的文件。如果權限是問題,那麼使用/ tmp /你會發現。 –