Getting a direct ssh connection into an app is not possible. All apps run in a separate container and are isolated from the main system. Depending on the app however, most apps have a read/write folder mounted from the host system into the container to store data. For example nextcloud is setup like this. The folder is located in /home/yellowtent/appsdata/<appid>/data/ and you could rsync data into this folder with the regular ssh connection to your server. You can easily see the appid if you open either the logs viewer of the app in question and take the appid from the browers url bar. Please note that this is merely a workaround so far and it depends on the app, if it correctly will pickup the data there.
You might want to consider putting a message on the invoices page or somewhere else about this, to be more explicit. Anyway, thanks for your help (and for cloudron!), I'm glad to know it went through alright.
Note that I too see the following message in my logs:
Aug 02 17:29:34 my.smartserver.space dockerd: time="2018-08-02T17:29:34Z" level=info msg="loading plugin "io.containerd.snapshotter.v1.btrfs"..." module=containerd type=io.containerd.snapshotter.v1
Aug 02 17:29:34 my.smartserver.space dockerd: time="2018-08-02T17:29:34Z" level=warning msg="failed to load plugin io.containerd.snapshotter.v1.btrfs" error="path /mnt/volume_sfo2_01/docker/containerd/daemon/io.containerd.snapshotter.v1.btrfs must be a btrfs filesystem to be used with the btrfs snapshotter" module=containerd
Aug 02 17:29:34 my.smartserver.space dockerd: time="2018-08-02T17:29:34Z" level=warning msg="could not use snapshotter btrfs in metadata plugin" error="path /mnt/volume_sfo2_01/docker/containerd/daemon/io.containerd.snapshotter.v1.btrfs must be a btrfs filesystem to be used with the btrfs snapshotter" module="containerd/io.containerd.metadata.v1.bolt"
But the above error is harmless. It is just saying that for btrfs plugin we need btrfs volume. This can be ignored since Cloudron does not use btrfs plugin.
As others said, usually the cron job is part of the app itself. If for some reason you want to run some cron task outside the scope of the app, then you can use a script like below and put it in the crontab of your server.
# this is the app's domain name
# detect the container id of the app
container_id=$(docker ps -q -f label=fqdn=$app -f label=isSubcontainer=false)
echo "App container id is : $container_id"
# we can now run arbitrary commands in the container. below we run a command as the www-data user.
docker exec $container_id sudo -u www-data ls -l
Aha, I'd glossed over the bit in the instructions that said to put the IP in the address bar -- I'd punched in the actual domain name and gotten a 404; that combined with the fact that the installer process saying it was waiting for cloudron to start had me thinking something had gone wrong. It's working now. Derp. Thanks for your help.
I forgot to post a follow up on this thread. I'd like to thank @girish for solving my problem. He responded quickly and arranged to ssh into my server to diagnose. He's been very patient and professional and I really appreciate it.
Basically the problem is due to MySQL addons not properly starting/building, so all apps using MySQL error out and cannot start or install. Hope the problem has been resolved in the final 2.4 releases 🙂
After disabling apparmor, I saw that mysqld would just quit without showing any error message or log output 😞 As a final thing, I just ended up moving platformdata/mysql to mysql-old and recreated containers again. That made mysql come up and then we restored all the apps.
Still a bit crazy/worrying that we hit this bug atleast twice now and there is no clear resolution.