Bash cron-一个脚本工作,而另一个不工作';T

Bash cron-一个脚本工作,而另一个不工作';T,bash,cron,archlinux,systemd,Bash,Cron,Archlinux,Systemd,我在Archlinux上,我试图强制一个cron应用程序执行我的脚本。所以我安装了fcron软件包,首先运行了它的守护进程,然后添加了fcrontab,如下所示: * * * * * /home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescript #!/bin/bash PATH=/usr/bin touch ~/test-002.txt #!/bin/bash PATH=/usr/bin acpi -

我在Archlinux上,我试图强制一个cron应用程序执行我的脚本。所以我安装了fcron软件包,首先运行了它的守护进程,然后添加了fcrontab,如下所示:

* * * * * /home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescript
#!/bin/bash
PATH=/usr/bin
touch ~/test-002.txt
#!/bin/bash
PATH=/usr/bin
acpi -b | awk -F'[,:%]' '{print $2, $3}' | {
    read -r status capacity
    if [ "$status" = Discharging -a "$capacity" -lt 5 ]; then
        logger "Critical battery threshold"
        systemctl hibernate
    fi
}
好吧,这就是问题的症结所在。如果该脚本的内容如下所示,则将执行该脚本:

* * * * * /home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescript
#!/bin/bash
PATH=/usr/bin
touch ~/test-002.txt
#!/bin/bash
PATH=/usr/bin
acpi -b | awk -F'[,:%]' '{print $2, $3}' | {
    read -r status capacity
    if [ "$status" = Discharging -a "$capacity" -lt 5 ]; then
        logger "Critical battery threshold"
        systemctl hibernate
    fi
}
但如果其内容如下所示,则不会执行:

* * * * * /home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescript
#!/bin/bash
PATH=/usr/bin
touch ~/test-002.txt
#!/bin/bash
PATH=/usr/bin
acpi -b | awk -F'[,:%]' '{print $2, $3}' | {
    read -r status capacity
    if [ "$status" = Discharging -a "$capacity" -lt 5 ]; then
        logger "Critical battery threshold"
        systemctl hibernate
    fi
}
为什么呢?即使是最新版本也说它应该可以工作,但我认为这是错误的——我只是更改了
#/bin/bash
并添加了
PATH=/usr/bin
脚本可以自己工作…


编辑:

所以我把我的脚本编辑成下面的样子,但它不起作用

#!/bin/sh
SHELL=/bin/sh

/usr/bin/acpi -b | /usr/bin/awk -F'[,:%]' '{print $2, $3}' | (
    read -r status capacity
    if [ "$status" = Discharging ] && [ "$capacity" -lt 50 ]; then
        /usr/bin/systemctl hibernate
    fi
)
如果我跑

[ziga@ziga-laptop hibernate]$ run-parts ~/Dropbox/workspace/operacijski/archlinux/hibernate/ -v
run-parts: executing /home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate//hibernatescript
我的电脑会休眠,但cron不会使用完全相同的脚本休眠我的电脑。我还尝试了fcron,但它不工作,尽管守护进程正在完全运行,并且fcrontab已设置。同样,这适用于任何简单的脚本,而不适用于此脚本

以下是一些信息:

[ziga@ziga-laptop ~]$ systemctl status fcron.service     
● fcron.service - fcron periodical command scheduler
   Loaded: loaded (/usr/lib/systemd/system/fcron.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2016-06-21 10:39:48 CEST; 58min ago
  Process: 419 ExecStart=/usr/bin/fcron (code=exited, status=0/SUCCESS)
 Main PID: 423 (fcron)
    Tasks: 1 (limit: 512)
   CGroup: /system.slice/fcron.service
           └─423 /usr/bin/fcron

Jun 21 11:34:00 ziga-laptop fcron[12833]: Job '/home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescrip
Jun 21 11:34:02 ziga-laptop fcron[12833]: Job '/home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescrip
Jun 21 11:35:00 ziga-laptop fcron[13021]: Job '/home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescrip
Jun 21 11:35:02 ziga-laptop fcron[13021]: Job '/home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescrip
Jun 21 11:36:00 ziga-laptop fcron[13210]: Job '/home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescrip
Jun 21 11:36:02 ziga-laptop fcron[13210]: Job '/home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescrip
Jun 21 11:37:00 ziga-laptop fcron[13407]: Job '/home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescrip
Jun 21 11:37:02 ziga-laptop fcron[13407]: Job '/home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescrip
Jun 21 11:38:00 ziga-laptop fcron[13599]: Job '/home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescrip
Jun 21 11:38:02 ziga-laptop fcron[13599]: Job '/home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescrip
[ziga@ziga-laptop ~]$ fcrontab -l
2016-06-21 11:38:48  INFO listing ziga's fcrontab
* * * * * /home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescript
[ziga@ziga-laptop ~]$ cat /home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/hibernatescript
#!/bin/sh
SHELL=/bin/sh

/usr/bin/acpi -b | /usr/bin/awk -F'[,:%]' '{print $2, $3}' | (
        read -r status capacity
        if [ "$status" = Discharging ] && [ "$capacity" -lt 50 ]; then
                /usr/bin/systemctl hibernate
        fi
)
[ziga@ziga-laptop ~]$ ls -l /home/ziga/Dropbox/workspace/operacijski/archlinux/hibernate/
total 16
-rwxrwxrwx 1 ziga users  214 Jun 21 08:46 hibernatescript
-rw-rw-rw- 1 ziga users 2832 Jun 21 00:24 README.txt
[ziga@ziga-laptop ~]$ groups ziga
lp audio bumblebee users
[ziga@ziga-laptop ~]$ 

将完整路径添加到
acpi
awk
logger
systemctl
或用路径扩展
$path
变量。请看一看:我已经在终端模拟器中执行了
echo$path
,并将输出复制到我的脚本中,但它也不起作用。@Cyrus我更改了两对
{
()
一起使用,但它不起作用。您指的是哪一对?注意,当您说
PATH=/usr/bin
时,您正在重置路径。正如@Cyrus所说,使用完整路径是因为cron用户的环境非常有限。另外,请选中将完整路径添加到
acpi
awk
logger
systemctl
,或者用路径扩展
$path
变量。请看一看:我已经在终端仿真器中执行了
echo$path
,并将输出复制到我的脚本中,但它也不起作用。@Cyrus我更改了两对
{
()
一起使用,但它不起作用。您指的是哪一对?注意,当您说
PATH=/usr/bin
时,您正在重置路径。正如@Cyrus所说,使用完整路径是因为cron用户的环境非常有限。还有,检查一下