Почему этот cronjob не работает?

Ваш ноутбук, вероятно, будет перегреваться. Состояние батареи вряд ли имеет отношение к проблеме.

Возможные решения:

1) Удалите пыль с вентиляционных отверстий для ноутбука и убедитесь, что вы не закрываете отверстия, помещая ноутбук на мягкую поверхность, как одеяло или ткань. [ ! d2]

2) Переместите ноутбук в более прохладную среду

3) Получите кулер для ноутбука, чтобы он поместил ноутбук, чтобы увеличить поток воздуха и уменьшить накопление тепла.

1
задан 4 May 2017 в 00:51

6 ответов

Проблема заключается в том, что сценарий не предназначен для работы с Cron. Он использует несколько переменных среды, которые недоступны из Cron, и они различны, в зависимости от среды рабочего стола текущего пользователя. Именно по этой причине на его странице будет описан другой способ запуска при запуске. Но возможно установить значения этих переменных во время работы CronJob.

Например, когда это среда рабочего стола Ubuntu по умолчанию, ключевыми словами поиска должны быть: «gsettings» и «cron», то наш поиск приведет нас к проводным темам: работает при запуске , где мы могли бы найти дополнительные объяснения как:

Если вы запустите скрипт из своей собственной среды (например, из терминальное окно или из приложений запуска) будет задан ряд переменных среды. Однако cron запускает ваш скрипт с ограниченным набором переменных окружения. Чтобы успешно отредактировать gsettings с cron, вам необходимо установить переменную среды DBUS_SESSION_BUS_ADDRESS. Вы можете сделать это, добавив две строки в ваш скрипт, как описано здесь ...

Запустить: Daily-Reddit-Обои через Cron через сценарий запуска

[d10 ] Здесь мы создадим сценарий запуска, который должен установить необходимые переменные среды в зависимости от выбранной (по аргументу) среды рабочего стола.

1. Первый клонированный Daily-Reddit-Wallpaper, а также установите зависимости:

cd ~
git clone https://github.com/ssimunic/Daily-Reddit-Wallpaper.git
cd ~/Daily-Reddit-Wallpaper
sudo apt-get install python-pip
pip install -r requirements.txt

1. Создайте файл сценария - change_wallpaper_reddit.sh:

cd ~/Daily-Reddit-Wallpaper
touch change_wallpaper_reddit.sh
chmod +x change_wallpaper_reddit.sh
nano change_wallpaper_reddit.sh
[d17 ] Содержание скрипта:

#!/bin/sh

# Reference: https://askubuntu.com/a/911958/566421

# Set the script home directory:
SHOME=Daily-Reddit-Wallpaper

# Set the output folder in the home directory to save the Wallpapers to:
DIR=Pictures/Wallpapers

# Set the --time parameter value
TIME=now

# Check if the Desktop Environment is changed:
LAST=$(cat "$HOME/$SHOME/last-desktop-environment.log")
if [ "$1" != "$LAST" ]
then
    # Get the name of the last saved wallpaper image:
    IMG=$(ls -Art $HOME/$DIR | tail -n 1)
    rm $HOME/$DIR/$IMG
fi

# Desktop Environment cases:
if [ -z ${1+x} ] || [ "$1" = "gnome" ] || [ "$1" = "unity" ]
then
    # Set the necessary environment variables - PID=$(pgrep gnome-session -u $USER) - UBUNTU/UNITY/GNOME:
    export GNOME_DESKTOP_SESSION_ID=true
    export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep gnome-session -n)/environ | cut -d= -f2-)

    # Run the script:
    $HOME/$SHOME/change_wallpaper_reddit.py --time $TIME --output $DIR

elif [ "$1" = "kde" ]
then
    # Set the necessary environment variables - KUBUNTU/PLASMA/KDE:
    export KDE_FULL_SESSION=true
    export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep startkde -n)/environ | cut -d= -f2-)

    # Run the script:
    $HOME/$SHOME/change_wallpaper_reddit.py --time $TIME --output $DIR

elif [ "$1" = "mate" ]
then
    # Set the necessary environment variables - Ubuntu MATE/MATE:
    export DESKTOP_SESSION=mate
    export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep mate-session -n)/environ | cut -d= -f2-)

    # Run the script:
    $HOME/$SHOME/change_wallpaper_reddit.py --time $TIME --output $DIR

elif [ "$1" = "lxde" ]
then
    # Set the necessary environment variables - type 'echo $DISPLAY` to find your current display - LUBUNTU/LXDE:
    export DESKTOP_SESSION=Lubuntu
    export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep lxsession -n)/environ | cut -d= -f2-)
    export DISPLAY=$(w $(id -un) | awk 'NF > 7 && $2 ~ /tty[0-9]+/ {print $3; exit}')

    # Run the script:
    $HOME/$SHOME/change_wallpaper_reddit.py --time $TIME --output $DIR

elif [ "$1" = "xfce4" ]
then
    # Set the necessary environment variables - XUBUNTU/XFCE4:
    export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep xfce4-session -n)/environ|cut -d= -f2-)

    # Run the script:
    $HOME/$SHOME/change_wallpaper_reddit.py --time $TIME --output $DIR

    # Get the name of the last saved wallpaper image:
    IMG=$(ls -Art $HOME/$DIR | tail -n 1)

    # Since 'change_wallpaper_reddit.py' doesn't work properly with xfce4 we shall set the background manually:
    xfconf-query --channel xfce4-desktop --property /backdrop/screen0/monitor0/workspace0/last-image --set $HOME/$DIR/$IMG

    # Property list:      xfconf-query --channel xfce4-desktop --list
    # Current settings:   xfconf-query -c xfce4-desktop -p /backdrop -lv
    # Set 'zoomed' style: xfconf-query --channel xfce4-desktop --property /backdrop/screen0/monitor0/workspace0/image-style --set 5
    # References:         https://askubuntu.com/q/380550/566421 and https://askubuntu.com/q/414422/566421

else
    echo "Wrong argument. It must be:"
    echo "  - empty (default) = gnome = unity"
    echo "  - kde"
    echo "  - lxde"
    echo "  - mate"
    echo "  - xfce4"
fi

# Save current value of the Desktop Environment variable:
echo "$1" > "$HOME/$SHOME/last-desktop-environment.log"

Этот скрипт имеет один аргумент $1, который определяет его поведение в зависимости от выбранной (от вас) среды рабочего стола (DE). Возможные значения:

gnome или unity или empty (по умолчанию) - при использовании стандартного Ubuntu DE; kde - когда вы используете KUbuntu DE; lxde - когда вы используете LUbuntu DE; mate - когда вы используете Ubuntu MATE DE; xfce4 - когда вы используете XUbuntu DE.

Также вы можете настроить эти начальные параметры:

gnome или unity или empty (по умолчанию) - при использовании стандартного Ubuntu DE; DIR= установить выходную папку в домашнем каталоге для сохранения обоев - в приведенном выше сценарии используется значение по умолчанию (Pictures/Wallpapers). kde - когда вы используете KUbuntu DE;

изменить_wallpaper_reddit.sh Создать Daily-Reddit-Wallpaper (crontab -e ]), который выполняет change_wallpaper_reddit.sh (например, каждый час):

DIR= установить папку вывода в домашнем каталоге, чтобы сохранить обои в - значение по умолчанию (Pictures/Wallpapers ) используется в приведенном выше сценарии. Если вы используете KUbuntu DE, например, этот CronJob может быть:
0 * * * * /home/<your user name>/Daily-Reddit-Wallpaper/change_wallpaper_reddit.sh kde > /home/<your user name>/Daily-Reddit-Wallpaper/cron.log 2>&1
lxde - когда вы используете LUbuntu DE;
[D44] Вуаля. аргумент

Ссылки и дальнейшая реинсталляция:

Если вы используете KUbuntu DE, например, этот CronJob может быть :
0 * * * * /home/<your user name>/Daily-Reddit-Wallpaper/change_wallpaper_reddit.sh kde > /home/<your user name>/Daily-Reddit-Wallpaper/cron.log 2>&1
Программа Crontab и C, которая должна быть выполнена в окне терминала. Отрегулируйте яркость с помощью задания xrandr и cron mate - при использовании Ubuntu MATE DE;
2
ответ дан 22 May 2018 в 22:58

Проблема заключается в том, что сценарий не предназначен для работы с Cron. Он использует несколько переменных среды, которые недоступны из Cron, и они различны, в зависимости от среды рабочего стола текущего пользователя. Именно по этой причине на его странице будет описан другой способ запуска при запуске. Но возможно установить значения этих переменных во время работы CronJob.

Например, когда это среда рабочего стола Ubuntu по умолчанию, ключевыми словами поиска должны быть: «gsettings» и «cron», то наш поиск приведет нас к проводным темам: работает при запуске , где мы могли бы найти дополнительные объяснения как:

Если вы запустите скрипт из своей собственной среды (например, из терминальное окно или из приложений запуска) будет задан ряд переменных среды. Однако cron запускает ваш скрипт с ограниченным набором переменных окружения. Чтобы успешно отредактировать gsettings с cron, вам необходимо установить переменную среды DBUS_SESSION_BUS_ADDRESS. Вы можете сделать это, добавив две строки в ваш скрипт, как описано здесь ...

Запустить: Daily-Reddit-Обои через Cron через сценарий запуска

Здесь мы создадим сценарий запуска, который должен установить необходимые переменные среды в зависимости от выбранной (по аргументу) среды рабочего стола.

1. Первый клонированный Daily-Reddit-Wallpaper, а также установите зависимости:

cd ~ git clone https://github.com/ssimunic/Daily-Reddit-Wallpaper.git cd ~/Daily-Reddit-Wallpaper sudo apt-get install python-pip pip install -r requirements.txt

1. Создайте файл сценария - change_wallpaper_reddit.sh:

cd ~/Daily-Reddit-Wallpaper touch change_wallpaper_reddit.sh chmod +x change_wallpaper_reddit.sh nano change_wallpaper_reddit.sh

Содержание скрипта:

#!/bin/sh # Reference: https://askubuntu.com/a/911958/566421 # Set the script home directory: SHOME=Daily-Reddit-Wallpaper # Set the output folder in the home directory to save the Wallpapers to: DIR=Pictures/Wallpapers # Set the --time parameter value TIME=now # Check if the Desktop Environment is changed: LAST=$(cat "$HOME/$SHOME/last-desktop-environment.log") if [ "$1" != "$LAST" ] then # Get the name of the last saved wallpaper image: IMG=$(ls -Art $HOME/$DIR | tail -n 1) rm $HOME/$DIR/$IMG fi # Desktop Environment cases: if [ -z ${1+x} ] || [ "$1" = "gnome" ] || [ "$1" = "unity" ] then # Set the necessary environment variables - PID=$(pgrep gnome-session -u $USER) - UBUNTU/UNITY/GNOME: export GNOME_DESKTOP_SESSION_ID=true export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep gnome-session -n)/environ | cut -d= -f2-) # Run the script: $HOME/$SHOME/change_wallpaper_reddit.py --time $TIME --output $DIR elif [ "$1" = "kde" ] then # Set the necessary environment variables - KUBUNTU/PLASMA/KDE: export KDE_FULL_SESSION=true export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep startkde -n)/environ | cut -d= -f2-) # Run the script: $HOME/$SHOME/change_wallpaper_reddit.py --time $TIME --output $DIR elif [ "$1" = "mate" ] then # Set the necessary environment variables - Ubuntu MATE/MATE: export DESKTOP_SESSION=mate export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep mate-session -n)/environ | cut -d= -f2-) # Run the script: $HOME/$SHOME/change_wallpaper_reddit.py --time $TIME --output $DIR elif [ "$1" = "lxde" ] then # Set the necessary environment variables - type 'echo $DISPLAY` to find your current display - LUBUNTU/LXDE: export DESKTOP_SESSION=Lubuntu export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep lxsession -n)/environ | cut -d= -f2-) export DISPLAY=$(w $(id -un) | awk 'NF > 7 && $2 ~ /tty[0-9]+/ {print $3; exit}') # Run the script: $HOME/$SHOME/change_wallpaper_reddit.py --time $TIME --output $DIR elif [ "$1" = "xfce4" ] then # Set the necessary environment variables - XUBUNTU/XFCE4: export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep xfce4-session -n)/environ|cut -d= -f2-) # Run the script: $HOME/$SHOME/change_wallpaper_reddit.py --time $TIME --output $DIR # Get the name of the last saved wallpaper image: IMG=$(ls -Art $HOME/$DIR | tail -n 1) # Since 'change_wallpaper_reddit.py' doesn't work properly with xfce4 we shall set the background manually: xfconf-query --channel xfce4-desktop --property /backdrop/screen0/monitor0/workspace0/last-image --set $HOME/$DIR/$IMG # Property list: xfconf-query --channel xfce4-desktop --list # Current settings: xfconf-query -c xfce4-desktop -p /backdrop -lv # Set 'zoomed' style: xfconf-query --channel xfce4-desktop --property /backdrop/screen0/monitor0/workspace0/image-style --set 5 # References: https://askubuntu.com/q/380550/566421 and https://askubuntu.com/q/414422/566421 else echo "Wrong argument. It must be:" echo " - empty (default) = gnome = unity" echo " - kde" echo " - lxde" echo " - mate" echo " - xfce4" fi # Save current value of the Desktop Environment variable: echo "$1" > "$HOME/$SHOME/last-desktop-environment.log"

Этот скрипт имеет один аргумент $1, который определяет его поведение в зависимости от выбранной (от вас) среды рабочего стола (DE). Возможные значения:

gnome или unity или empty (по умолчанию) - при использовании стандартного Ubuntu DE; kde - когда вы используете KUbuntu DE; lxde - когда вы используете LUbuntu DE; mate - когда вы используете Ubuntu MATE DE; xfce4 - когда вы используете XUbuntu DE.

Также вы можете настроить эти начальные параметры:

gnome или unity или empty (по умолчанию) - при использовании стандартного Ubuntu DE; DIR= установить выходную папку в домашнем каталоге для сохранения обоев - в приведенном выше сценарии используется значение по умолчанию (Pictures/Wallpapers). kde - когда вы используете KUbuntu DE;

изменить_wallpaper_reddit.sh Создать Daily-Reddit-Wallpaper (crontab -e ]), который выполняет change_wallpaper_reddit.sh (например, каждый час):

DIR= установить папку вывода в домашнем каталоге, чтобы сохранить обои в - значение по умолчанию (Pictures/Wallpapers ) используется в приведенном выше сценарии. Если вы используете KUbuntu DE, например, этот CronJob может быть: 0 * * * * /home/<your user name>/Daily-Reddit-Wallpaper/change_wallpaper_reddit.sh kde > /home/<your user name>/Daily-Reddit-Wallpaper/cron.log 2>&1 lxde - когда вы используете LUbuntu DE; [D44] Вуаля. аргумент

Ссылки и дальнейшая реинсталляция:

Если вы используете KUbuntu DE, например, этот CronJob может быть : 0 * * * * /home/<your user name>/Daily-Reddit-Wallpaper/change_wallpaper_reddit.sh kde > /home/<your user name>/Daily-Reddit-Wallpaper/cron.log 2>&1 Программа Crontab и C, которая должна быть выполнена в окне терминала. Отрегулируйте яркость с помощью задания xrandr и cron mate - при использовании Ubuntu MATE DE;
2
ответ дан 18 July 2018 в 13:52

Проблема заключается в том, что сценарий не предназначен для работы с Cron. Он использует несколько переменных среды, которые недоступны из Cron, и они различны, в зависимости от среды рабочего стола текущего пользователя. Именно по этой причине на его странице будет описан другой способ запуска при запуске. Но возможно установить значения этих переменных во время работы CronJob.

Например, когда это среда рабочего стола Ubuntu по умолчанию, ключевыми словами поиска должны быть: «gsettings» и «cron», то наш поиск приведет нас к проводным темам: работает при запуске , где мы могли бы найти дополнительные объяснения как:

Если вы запустите скрипт из своей собственной среды (например, из терминальное окно или из приложений запуска) будет задан ряд переменных среды. Однако cron запускает ваш скрипт с ограниченным набором переменных окружения. Чтобы успешно отредактировать gsettings с cron, вам необходимо установить переменную среды DBUS_SESSION_BUS_ADDRESS. Вы можете сделать это, добавив две строки в ваш скрипт, как описано здесь ...

Запустить: Daily-Reddit-Обои через Cron через сценарий запуска

Здесь мы создадим сценарий запуска, который должен установить необходимые переменные среды в зависимости от выбранной (по аргументу) среды рабочего стола.

1. Первый клонированный Daily-Reddit-Wallpaper, а также установите зависимости:

cd ~ git clone https://github.com/ssimunic/Daily-Reddit-Wallpaper.git cd ~/Daily-Reddit-Wallpaper sudo apt-get install python-pip pip install -r requirements.txt

1. Создайте файл сценария - change_wallpaper_reddit.sh:

cd ~/Daily-Reddit-Wallpaper touch change_wallpaper_reddit.sh chmod +x change_wallpaper_reddit.sh nano change_wallpaper_reddit.sh

Содержание скрипта:

#!/bin/sh # Reference: https://askubuntu.com/a/911958/566421 # Set the script home directory: SHOME=Daily-Reddit-Wallpaper # Set the output folder in the home directory to save the Wallpapers to: DIR=Pictures/Wallpapers # Set the --time parameter value TIME=now # Check if the Desktop Environment is changed: LAST=$(cat "$HOME/$SHOME/last-desktop-environment.log") if [ "$1" != "$LAST" ] then # Get the name of the last saved wallpaper image: IMG=$(ls -Art $HOME/$DIR | tail -n 1) rm $HOME/$DIR/$IMG fi # Desktop Environment cases: if [ -z ${1+x} ] || [ "$1" = "gnome" ] || [ "$1" = "unity" ] then # Set the necessary environment variables - PID=$(pgrep gnome-session -u $USER) - UBUNTU/UNITY/GNOME: export GNOME_DESKTOP_SESSION_ID=true export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep gnome-session -n)/environ | cut -d= -f2-) # Run the script: $HOME/$SHOME/change_wallpaper_reddit.py --time $TIME --output $DIR elif [ "$1" = "kde" ] then # Set the necessary environment variables - KUBUNTU/PLASMA/KDE: export KDE_FULL_SESSION=true export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep startkde -n)/environ | cut -d= -f2-) # Run the script: $HOME/$SHOME/change_wallpaper_reddit.py --time $TIME --output $DIR elif [ "$1" = "mate" ] then # Set the necessary environment variables - Ubuntu MATE/MATE: export DESKTOP_SESSION=mate export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep mate-session -n)/environ | cut -d= -f2-) # Run the script: $HOME/$SHOME/change_wallpaper_reddit.py --time $TIME --output $DIR elif [ "$1" = "lxde" ] then # Set the necessary environment variables - type 'echo $DISPLAY` to find your current display - LUBUNTU/LXDE: export DESKTOP_SESSION=Lubuntu export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep lxsession -n)/environ | cut -d= -f2-) export DISPLAY=$(w $(id -un) | awk 'NF > 7 && $2 ~ /tty[0-9]+/ {print $3; exit}') # Run the script: $HOME/$SHOME/change_wallpaper_reddit.py --time $TIME --output $DIR elif [ "$1" = "xfce4" ] then # Set the necessary environment variables - XUBUNTU/XFCE4: export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep xfce4-session -n)/environ|cut -d= -f2-) # Run the script: $HOME/$SHOME/change_wallpaper_reddit.py --time $TIME --output $DIR # Get the name of the last saved wallpaper image: IMG=$(ls -Art $HOME/$DIR | tail -n 1) # Since 'change_wallpaper_reddit.py' doesn't work properly with xfce4 we shall set the background manually: xfconf-query --channel xfce4-desktop --property /backdrop/screen0/monitor0/workspace0/last-image --set $HOME/$DIR/$IMG # Property list: xfconf-query --channel xfce4-desktop --list # Current settings: xfconf-query -c xfce4-desktop -p /backdrop -lv # Set 'zoomed' style: xfconf-query --channel xfce4-desktop --property /backdrop/screen0/monitor0/workspace0/image-style --set 5 # References: https://askubuntu.com/q/380550/566421 and https://askubuntu.com/q/414422/566421 else echo "Wrong argument. It must be:" echo " - empty (default) = gnome = unity" echo " - kde" echo " - lxde" echo " - mate" echo " - xfce4" fi # Save current value of the Desktop Environment variable: echo "$1" > "$HOME/$SHOME/last-desktop-environment.log"

Этот скрипт имеет один аргумент $1, который определяет его поведение в зависимости от выбранной (от вас) среды рабочего стола (DE). Возможные значения:

gnome или unity или empty (по умолчанию) - при использовании стандартного Ubuntu DE; kde - когда вы используете KUbuntu DE; lxde - когда вы используете LUbuntu DE; mate - когда вы используете Ubuntu MATE DE; xfce4 - когда вы используете XUbuntu DE.

Также вы можете настроить эти начальные параметры:

gnome или unity или empty (по умолчанию) - при использовании стандартного Ubuntu DE; DIR= установить выходную папку в домашнем каталоге для сохранения обоев - в приведенном выше сценарии используется значение по умолчанию (Pictures/Wallpapers). kde - когда вы используете KUbuntu DE;

изменить_wallpaper_reddit.sh Создать Daily-Reddit-Wallpaper (crontab -e ]), который выполняет change_wallpaper_reddit.sh (например, каждый час):

DIR= установить папку вывода в домашнем каталоге, чтобы сохранить обои в - значение по умолчанию (Pictures/Wallpapers ) используется в приведенном выше сценарии. Если вы используете KUbuntu DE, например, этот CronJob может быть: 0 * * * * /home/<your user name>/Daily-Reddit-Wallpaper/change_wallpaper_reddit.sh kde > /home/<your user name>/Daily-Reddit-Wallpaper/cron.log 2>&1 lxde - когда вы используете LUbuntu DE; [D44] Вуаля. аргумент

Ссылки и дальнейшая реинсталляция:

Если вы используете KUbuntu DE, например, этот CronJob может быть : 0 * * * * /home/<your user name>/Daily-Reddit-Wallpaper/change_wallpaper_reddit.sh kde > /home/<your user name>/Daily-Reddit-Wallpaper/cron.log 2>&1 Программа Crontab и C, которая должна быть выполнена в окне терминала. Отрегулируйте яркость с помощью задания xrandr и cron mate - при использовании Ubuntu MATE DE;
2
ответ дан 24 July 2018 в 20:16

Имейте в виду, что cronjab выполняется в оболочке с ограниченной настройкой среды. Под этим я подразумеваю, что когда вы открываете терминал и вводите env, вы увидите много переменных среды; один из самых важных - ПУТЬ. Задача cron не входит в систему так, чтобы говорить, поэтому файлы .profile не выполняются. Таким образом, в вашем скрипте вы должны установить или добавить переменные окружения, такие как PATH. Кроме того, запись cron не должна использовать ~, но поместить полный путь.

В моей системе я создал небольшой скрипт для отображения переменных среды, которые задаются при запуске скрипта в cron. Как вы видите намного меньше, чем в терминале:

HOME=/home/willem
LANG=en_US.UTF-8
LC_ADDRESS=nl_NL.UTF-8
LC_IDENTIFICATION=nl_NL.UTF-8
LC_MEASUREMENT=nl_NL.UTF-8
LC_MONETARY=nl_NL.UTF-8
LC_NAME=nl_NL.UTF-8
LC_NUMERIC=nl_NL.UTF-8
LC_PAPER=nl_NL.UTF-8
LC_TELEPHONE=nl_NL.UTF-8
LC_TIME=nl_NL.UTF-8
LOGNAME=willem
PATH=/usr/bin:/bin
PWD=/home/willem
SHELL=/bin/sh
SHLVL=1
_=/usr/bin/env

Правильные сценарии начинаются с выражения shebang, в каком-то тексте, объясняющем, что сценарий будет делать (вы можете забыть через несколько месяцев), а затем установить переменные среды. Небольшой пример (NB env - мое имя пользователя:

#!/bin/bash    # Script is created and tested for Bash.
# Example script Hello, runs outside a terminal so PATH is minimal.
# We must set env vars.
# Note I do not use "export PATH=$PATH:..." etc, because I want my progs
# directory to be found first.
export MYHOME=/home/willem
export MYLOGS=$MYHOME/logs
export MYPROGS=$MYHOME/prog
export PATH=$MYPROGS:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
#
# The main code of the script:
#
echo "Hello: started" > $MYLOGS/Hello.log
goodDay >> $MYLOGS/Hello.log   # goodDay is also in $MYPROGS
...
...
#EOF

Чтобы поместить скрипт в cron, введите crontab -e: Вы находитесь в vi, перейдите к концу файла и добавьте: * * * * * / home / willem / prog / Hello

Закройте и сохраните и просмотрите запись / записи crontab: crontab -e

4
ответ дан 22 May 2018 в 22:58
  • 1
    Как мне похвастать мои переменные среды здесь моим сценарием? Каким будет мой ПУТЬ? – Sharan Duggirala 4 May 2017 в 02:40
  • 2
    Я добавлю его в свой ответ. – WillemK 4 May 2017 в 11:38
  • 3
    Хорошо, я добавил некоторые объяснения в свой ответ. Очевидно, вы должны настроить его на пользователя, среду и т. Д. – WillemK 4 May 2017 в 12:50

Имейте в виду, что cronjab выполняется в оболочке с ограниченной настройкой среды. Под этим я подразумеваю, что когда вы открываете терминал и вводите env, вы увидите много переменных среды; один из самых важных - ПУТЬ. Задача cron не входит в систему так, чтобы говорить, поэтому файлы .profile не выполняются. Таким образом, в вашем скрипте вы должны установить или добавить переменные окружения, такие как PATH. Кроме того, запись cron не должна использовать ~, но поместить полный путь.

В моей системе я создал небольшой скрипт для отображения переменных среды, которые задаются при запуске скрипта в cron. Как вы видите намного меньше, чем в терминале:

HOME=/home/willem LANG=en_US.UTF-8 LC_ADDRESS=nl_NL.UTF-8 LC_IDENTIFICATION=nl_NL.UTF-8 LC_MEASUREMENT=nl_NL.UTF-8 LC_MONETARY=nl_NL.UTF-8 LC_NAME=nl_NL.UTF-8 LC_NUMERIC=nl_NL.UTF-8 LC_PAPER=nl_NL.UTF-8 LC_TELEPHONE=nl_NL.UTF-8 LC_TIME=nl_NL.UTF-8 LOGNAME=willem PATH=/usr/bin:/bin PWD=/home/willem SHELL=/bin/sh SHLVL=1 _=/usr/bin/env

Правильные сценарии начинаются с выражения shebang, в каком-то тексте, объясняющем, что сценарий будет делать (вы можете забыть через несколько месяцев), а затем установить переменные среды. Небольшой пример (NB env - мое имя пользователя:

#!/bin/bash # Script is created and tested for Bash. # Example script Hello, runs outside a terminal so PATH is minimal. # We must set env vars. # Note I do not use "export PATH=$PATH:..." etc, because I want my progs # directory to be found first. export MYHOME=/home/willem export MYLOGS=$MYHOME/logs export MYPROGS=$MYHOME/prog export PATH=$MYPROGS:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin # # The main code of the script: # echo "Hello: started" > $MYLOGS/Hello.log goodDay >> $MYLOGS/Hello.log # goodDay is also in $MYPROGS ... ... #EOF

Чтобы поместить скрипт в cron, введите crontab -e: Вы находитесь в vi, перейдите к концу файла и добавьте: * * * * * / home / willem / prog / Hello

Закройте и сохраните и просмотрите запись / записи crontab: crontab -e

4
ответ дан 18 July 2018 в 13:52

Имейте в виду, что cronjab выполняется в оболочке с ограниченной настройкой среды. Под этим я подразумеваю, что когда вы открываете терминал и вводите env, вы увидите много переменных среды; один из самых важных - ПУТЬ. Задача cron не входит в систему так, чтобы говорить, поэтому файлы .profile не выполняются. Таким образом, в вашем скрипте вы должны установить или добавить переменные окружения, такие как PATH. Кроме того, запись cron не должна использовать ~, но поместить полный путь.

В моей системе я создал небольшой скрипт для отображения переменных среды, которые задаются при запуске скрипта в cron. Как вы видите намного меньше, чем в терминале:

HOME=/home/willem LANG=en_US.UTF-8 LC_ADDRESS=nl_NL.UTF-8 LC_IDENTIFICATION=nl_NL.UTF-8 LC_MEASUREMENT=nl_NL.UTF-8 LC_MONETARY=nl_NL.UTF-8 LC_NAME=nl_NL.UTF-8 LC_NUMERIC=nl_NL.UTF-8 LC_PAPER=nl_NL.UTF-8 LC_TELEPHONE=nl_NL.UTF-8 LC_TIME=nl_NL.UTF-8 LOGNAME=willem PATH=/usr/bin:/bin PWD=/home/willem SHELL=/bin/sh SHLVL=1 _=/usr/bin/env

Правильные сценарии начинаются с выражения shebang, в каком-то тексте, объясняющем, что сценарий будет делать (вы можете забыть через несколько месяцев), а затем установить переменные среды. Небольшой пример (NB env - мое имя пользователя:

#!/bin/bash # Script is created and tested for Bash. # Example script Hello, runs outside a terminal so PATH is minimal. # We must set env vars. # Note I do not use "export PATH=$PATH:..." etc, because I want my progs # directory to be found first. export MYHOME=/home/willem export MYLOGS=$MYHOME/logs export MYPROGS=$MYHOME/prog export PATH=$MYPROGS:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin # # The main code of the script: # echo "Hello: started" > $MYLOGS/Hello.log goodDay >> $MYLOGS/Hello.log # goodDay is also in $MYPROGS ... ... #EOF

Чтобы поместить скрипт в cron, введите crontab -e: Вы находитесь в vi, перейдите к концу файла и добавьте: * * * * * / home / willem / prog / Hello

Закройте и сохраните и просмотрите запись / записи crontab: crontab -e

4
ответ дан 24 July 2018 в 20:16
  • 1
    Как мне похвастать мои переменные среды здесь моим сценарием? Каким будет мой ПУТЬ? – Sharan Duggirala 4 May 2017 в 02:40
  • 2
    Я расскажу об этом в своем ответе. – user 4 May 2017 в 11:38
  • 3
    Хорошо, я добавил некоторые объяснения в свой ответ. Очевидно, вы должны настроить его на пользователя, среду и т. Д. – user 4 May 2017 в 12:50

Другие вопросы по тегам:

Похожие вопросы: