Cronjobs são executados como qualquer usuário que tenha definido o crontab. Eles não funcionam como um usuário especial. Normalmente, se você sabe que existe um crontab, você sabe quem o configurou. Você pode ver os crontabs do usuário atual executando
crontab -l
Você pode encontrar crontabs específicos do usuário no diretório /var/spool/cron/crontabs/
. Cada usuário que criou um crontab terá um arquivo (cujo nome é o nome do usuário) nesse diretório. Por padrão, esses arquivos só podem ser lidos pelo usuário que os criou, portanto, você não pode cat
sem usar as permissões deles.
Este pequeno scriptlet listará todos os comandos do cron para cada usuário:
for u in $(find /var/spool/cron/crontabs/ -type f); do
user='basename $u';
echo "------- $user ----";
crontab -u $user -l | grep -v "#";
done
Isso listará todos os cronjobs de cada usuário que tenha um arquivo crontab em /var/spool/cron/crontabs/
.
Finalmente, você também tem os crontabs em todo o sistema que estão em /etc/crontab
, que você pode ver executando cat /etc/crontab
.
Em resposta ao seu comentário, se você deseja carregar variáveis específicas que são definidas em um determinado arquivo, você pode source
desse arquivo em crontab
:
42 13 * * * . ~/.bashrc && cd /path/to/my/working/folder && /path/to/my/working/folder/script/runner 'MusicService.update_cached_data' -e staging
Isso é .
seguido pelo arquivo que você deseja carregar.
Finalmente, aqui estão algumas informações relevantes de man 5 crontab
:
An active line in a crontab will be either an envi‐
ronment setting or a cron command. The crontab file
is parsed from top to bottom, so any environment set‐
tings will affect only the cron commands below them
in the file. An environment setting is of the form,
name = value
where the spaces around the equal-sign (=) are
optional, and any subsequent non-leading spaces in
value will be part of the value assigned to name.
The value string may be placed in quotes (single or
double, but matching) to preserve leading or trailing
blanks. To define an empty variable, quotes must be
used. The value string is not parsed for environmen‐
tal substitutions or replacement of variables, thus
lines like
PATH = $HOME/bin:$PATH
will not work as you might expect.
An alternative for setting up the commands path is
using the fact that many shells will treat the
tilde(~) as substitution of $HOME, so if you use bash
for your tasks you can use this:
SHELL=/bin/bash
PATH=~/bin:/usr/bin/:/bin
[...]
Several environment variables are set up automati‐
cally by the cron(8) daemon. SHELL is set to
/bin/sh, and LOGNAME and HOME are set from the
/etc/passwd line of the crontab's owner. PATH is set
to "/usr/bin:/bin". HOME, SHELL, and PATH may be
overridden by settings in the crontab; LOGNAME is the
user that the job is running from, and may not be
changed.
[...]
On the Debian GNU/Linux system, cron supports the
pam_env module, and loads the environment specified
by /etc/environment and /etc/security/pam_env.conf.
It also reads locale information from
/etc/default/locale. However, the PAM settings do
NOT override the settings described above nor any
settings in the crontab file itself. Note in particu‐
lar that if you want a PATH other than
"/usr/bin:/bin", you will need to set it in the
crontab file.